Как загрузить WKWebView перейти на корневую страницу при нажатии активной панели вкладок?

#swift #xcode #uiviewcontroller #uitabbarcontroller #wkwebview

#swift #xcode #uiviewcontroller #uitabbarcontroller #wkwebview

Вопрос:

Я новичок в разработке iOS, используя Xcode 10.2 и Swift 5 (последнее обновление). Я разрабатываю приложение для iOS, используя панель вкладок и WKWebView. Приложение имеет 5 вкладок, каждая из которых отображает отдельную веб-страницу.

Я хочу, чтобы пользователь чувствовал, что когда пользователь переходит на первую вкладку и просматривает там, затем пользователь нажимает другую панель вкладок, после этого пользователь возвращается на первую вкладку и все еще отображает ту же страницу, прежде чем перейти на другую вкладку. Если пользователь хочет вернуться на корневую страницу вкладки, просто снова нажмите активную панель вкладок.

Как я могу это сделать?

Я использую RootViewController, затем расширяю до 5 других ViewController:
— HomeViewController
— SignalViewController
— ContactViewController
— NewsViewController
— ProfileViewController

Я пробовал некоторые предложения со многих сайтов, но не удалось, например, использовать:
— UITabBarControllerDelegate TabBarController (: didSelect:)
— UIViewController viewDidAppear(
🙂
— UIViewController viewWillAppear(🙂
— super.viewDidLoad () или self.viewDidLoad()
— UIView setNeedsDisplay(
🙂
— веб-просмотр.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 равен currentTab), WKWebView перейдет к URL по умолчанию, но это не удается (ничего не произошло).

Комментарии:

1. Можете ли вы объяснить but it fails средства? Где происходит сбой или каково ваше ожидаемое поведение? Или, точнее, вы можете добавить свои другие скриншоты?

2. «но это не удается» означает, что приложению не удалось перейти на URL по умолчанию. Я ожидаю, что когда пользователь снова нажмет АКТИВНУЮ панель вкладок, wkwebview перейдет на URL по умолчанию.

3. Удалить self.goToUrl(url: defaultUrl) из viewDidLoad() и добавить внутри viewWillAppear(_ animated: Bool) . Он будет обновляться при каждом переключении Tabs

4. Нет, я не хочу обновлять вкладку всякий раз, когда пользователь переключает вкладки. Вкладка обновляется только тогда, когда пользователь снова нажимает АКТИВНУЮ вкладку. Пример: пользователь получает доступ к первой вкладке и переходит с нее на другую веб-страницу «Наши услуги» с веб-страницы «Главная». Затем пользователь хочет вернуться в «Home», поэтому пользователь просто нажимает первую вкладку (АКТИВНАЯ вкладка), затем WKWebView снова переходит к URL по умолчанию.

5.Вам нужно different Tabs снова загрузить URL по умолчанию, потому что в TabViewController он не будет повторно создавать ViewController, если он уже загружен.

Ответ №1:

Согласно опубликованному вопросу, пока я понимаю, что вам нужно правильно реализовать приведенные ниже функции с помощью . 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
}
} ```