在特定的 TabBar 中打开 URL

Open URL in specific TabBar

我正在实施一个 "Tabbet App",我需要一个 "Tab" 才能在 Safari 中打开一个 URL(新的 window 不在同一个 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 return 到应用程序时,Tab4 被选中并且因为它不包含任何东西所以它看起来是白色的。

我需要点击 Tab4 来打开 Safari,但它不应该被选中(你必须一直选择上一个标签。)

在图像的示例中:我目前在 Tab1 中,按 Tab4 应该会打开 Safari,但保持选中的 Tab1

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

有点像,

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

使用 UITabBarControllerDelegate 添加到您的 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
    }
}

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