Ios 在特定选项卡栏中打开URL
我正在实现一个“Tabbet应用程序”,我需要一个“Tab”来在Safari中打开URL(新窗口不在同一个viewcontroller中) 目前,例如在Tab4(Tab4ViewControllerView.swif)的viewcontroller中,我添加了以下代码:Ios 在特定选项卡栏中打开URL,ios,swift,uitabbar,Ios,Swift,Uitabbar,我正在实现一个“Tabbet应用程序”,我需要一个“Tab”来在Safari中打开URL(新窗口不在同一个viewcontroller中) 目前,例如在Tab4(Tab4ViewControllerView.swif)的viewcontroller中,我添加了以下代码: guard let url = URL(string: "https://google.com") else { return //be safe } if #available(iOS 1
guard let url = URL(string: "https://google.com") else {
return //be safe
}
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(url)
}
它可以工作,但当我从Safari返回应用程序时,选择了Tab4,因为它不包含任何内容,所以看起来是白色的
我需要单击Tab4打开Safari,但不应选择它(您必须继续选择上一个选项卡)
在图像示例中:我当前在Tab1中,按Tab4应打开Safari,但保留选中的Tab1
您应该使用
WKWebView
或UIWebView
在tab4中嵌入一个webView。这样你就不必离开你的申请了
大概
let webView = WKWebView()
override func loadView() {
self.view = webView
}
if let url = URL(string: "https://www.apple.com") {
let request = URLRequest(url: url)
webView.load(request)
}
使用UITABBARCONTROLERDELEGATE添加到UITabBarController扩展,并设置为Tab 4恢复Id 在
TabBarViewContoller
中添加:
import UIKit
class TabBarViewController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
delegate = self
// Do any additional setup after loading the view.
}
}
extension TabBarViewController: UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if viewController.restorationIdentifier == "safariTabViewController" {
if let url = URL(string: "your_url"), UIApplication.shared.canOpenURL(url) {
UIApplication.shared.openURL(url)
}
return false
}
return true
}
}
当您在delegate中返回false时,请确保选项卡不会被切换谢谢您的回答,我正在实现您的代码<代码>委托=自我是否正确?我得到错误:
使用未解析的标识符“delegate”
您应该将其添加到UITabBarController中。UITabBarController具有委托弱打开变量委托:UITabBarControllerDelegate?
对不起,我的错误,请不要在4选项卡视图中添加情节提要id,而是添加还原idcontroller@AlbertB我已经用额外的截图和代码片段更新了答案。我已经应用了你的代码,现在它对我有用了,但是在扩展中使用返回false
谢谢!