如何加载WKWebview在按活动标签栏时转到根页面?



我是使用 Xcode 10.2 和 Swift 5 进行 iOS 开发的新手(最新更新)。我正在使用TabBar和WKWebview开发iOS应用程序。该应用程序有 5 个选项卡,每个选项卡显示不同的网页。

我想让用户体验到,当用户访问第一个选项卡并在那里浏览时,然后用户按另一个选项卡栏,在该用户返回第一个选项卡之后仍然显示相同的页面,然后转到另一个选项卡。如果用户想返回选项卡的根页面,只需再次按活动选项卡栏即可。

我怎样才能实现它?

我正在使用 RootViewController,然后扩展到 5 另一个 ViewController:
- 主视图控制器
- 信号视图控制器
- 接触视图控制器
- 新闻视图控制器
- 配置文件视图控制器

我尝试了许多网站的一些建议,但失败了,例如使用:
- UITabBarControllerDelegate tabBarController(:d idSelect:)
- UIView控制器视图确实出现(
:)
- UIView控制器视图将出现(:)
- super.viewDidLoad() 或 self.viewDidLoad()
- UIView setNeedsDisplay(
:)
- webview.load()

// set global variable for checking selected index tab
var prevTab: Int = 0
var currentTab: Int = 0;
class RootViewController: UIViewController, WKUIDelegate, UITabBarControllerDelegate {
// declare var for WebKit
var webView: WKWebView!
// load view of WebKit
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}
// for display URL in WebKit
func goToUrl(url: String){
let myURL = URL(string:url)
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
}
class HomeViewController: RootViewController {
let defaultUrl : String = "https://yourdomain.com/"
override func viewDidLoad() {
super.viewDidLoad()
// for checking click on active tab to root page of tab
self.tabBarController?.delegate = self
// call URL to dipslayed on WebKit View
self.goToUrl(url: defaultUrl)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// Tells the delegate that the user selected an item in the tab bar
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController){
// get selected index tab
currentTab = self.tabBarController?.selectedIndex ?? 0
if(prevTab == currentTab){
// MUST GO TO DEFAULT URL
}
// save selected index tab for next checking
prevTab = currentTab
}
}

我希望当用户再次按活动选项卡栏(prevTab 等于当前选项卡)时,WKWebview 转到默认 URL,但它失败(什么也没发生)。

根据到目前为止发布的问题,我知道您需要使用 .UITabBarController, UITabBarControllerDelegate.

1) ```override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
self.tabBarController?.delegate = self
} ```
2) ```override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) 
} ```
3) ``` override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { switch item.title! {
case "First":
print("First")
case "Second":
print("Second")
default:
print("Home")
self.selectedIndex = 2 .  /// selection of Tabbar item
}
} ```

最新更新