2016-04-24 157 views
0

我有一個應用程序,顯示一個網頁的webView。網頁由一個包含大量子頁面的主頁面組成。當我在主頁面上時,我想要導航「後退」按鈕以保持返回到上一個視圖控制器的默認行爲。但是當網頁位於子頁面上時,我想要導航「後退」按鈕將網頁轉到主網頁。覆蓋iOS回退按鈕

所以我需要趕上,當用戶按下後退按鈕,如果他在一個Web子頁面帶他到Web主頁,並防止WebView關閉。我在想,我可以使用viewWillDisappear()來捕捉後退按鈕,但是如何防止視圖關閉?

+0

您是否需要知道如何測試webview組件,或者您是否需要知道如何使用後退按鈕在結構方面進行設置? –

回答

0

入住這個帖子出來:

Execute action when back bar button of UINavigationController is pressed

像這樣的事情應該做,在你看來控制器代碼:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.navigationItem.hidesBackButton = true 
    let customBackButtonItem = UIBarButtonItem(title: "Back", style: .Bordered, target: self, action:#selector(customBackMethod(_:))) 
    self.navigationItem.leftBarButtonItem = customBackButtonItem 
} 

// @objc is so we can use #selector() up above 
@objc func customBackMethod(sender: UIBarButtonItem) { 
    if webView.canGoBack { 
     webView.goBack() 
    } 
} 

請注意,您可能需要使用的UIBarButtonItem(圖片:,風格:,目標:,行動:)如果你想'回'圖像,或UIBarButtonItem(customView :)。看到這個問題,並回答了更多的細節:https://stackoverflow.com/a/36180934/892990

0

到KickimusButticus的回答相似:

如果你想更輕鬆地完成用故事板和這樣的,你可以連上你的後退按鈕的IBAction爲像這樣它:

@IBAction func back() { 

} 

而且具有對用戶是否是在網頁視圖的子頁面內部測試。如果他們是,你可以混淆webview。如果他們在主頁上,您可以簡單地使用後退按鈕繼續到您的主視圖控制器或使用self.dismissViewControllerAnimated(true, completion: nil)關閉該視圖控制器。

+0

我實施了KickimusButticus的建議,它的工作原理。但我認爲這看起來更優雅,所以我嘗試了它,但我的back()函數從未被調用過。我想我已經把它連接起來了,它看起來很像它裏面的小圓點。任何關於我可能做錯的建議? – Gongevangen

+0

@Gongevangen如果你連接正確,那麼只要你點擊後退按鈕就應該調用它。我建議你通過查看屬性檢查器中的連接來檢查你是否有正確的連接。也許嘗試重新連接它,看看是否有效。 –