Ios 在特定选项卡栏中打开URL

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

我正在实现一个“Tabbet应用程序”,我需要一个“Tab”来在Safari中打开URL(新窗口不在同一个viewcontroller中)

目前,例如在Tab4(Tab4ViewControllerView.swif)的viewcontroller中,我添加了以下代码:

  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
谢谢!