在特定的TabBar中打开URL

时间:2018-11-15 16:40:45

标签: ios swift uitabbar

我正在实现“ Tabbet应用程序”,并且需要“ Tab”才能在Safari中打开URL(新窗口不在同一ViewController中)

例如,当前在Tab4的视图控制器(Tab4ViewControllerView.swif)中,我添加了以下代码:

  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

sample

2 个答案:

答案 0 :(得分:2)

使用UITabBarControllerDelegate添加到UITabBarController扩展,也设置为Tab 4还原ID

restoration id for tab

TabBarController

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
    }
}

在委托中返回false时-确保不会切换选项卡

答案 1 :(得分:0)

您应该使用WKWebViewUIWebView将webView嵌入tab4中。这样,您就不必离开应用程序。

类似

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)
}