2016-04-24 158 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如果你连接正确,那么只要你点击后退按钮就应该调用它。我建议你通过查看属性检查器中的连接来检查你是否有正确的连接。也许尝试重新连接它,看看是否有效。 –