Swift - 使用导航栏返回按钮实现UIWebView的返回按钮

9

目前我正在使用UIWebView上的按钮来返回用户搜索的每个网页,效果很好。但是有没有办法使用导航栏后退按钮来返回之前的网页,当无法返回到更多页面时,再打开上一个视图控制器呢?

以下是我用于返回的代码,它只连接到UIButton。

// Back button events
func onBackButton_Clicked(sender: UIButton)
{
    if(webview.canGoBack)
    {
        webview.goBack()
    }
}

非常感谢您的帮助。

3个回答

27

在你的代码中,你可以添加一个else语句,在没有更多的网页历史记录时弹出视图控制器,这将返回到先前的视图控制器(如果你的视图控制器在导航控制器中):

if(webview.canGoBack) {
    //Go back in webview history
    webview.goBack()
} else {
    //Pop view controller to preview view controller
    self.navigationController?.popViewControllerAnimated(true)
}

如果您想删除默认的返回按钮并使用自定义按钮,请在ViewDidLoad中添加以下代码:

self.navigationItem.backBarButtonItem = UIBarButtonItem(image: image, style: UIBarButtonItemStyle.Plain, target: self, action:  "onBackButton_Clicked:")

然后将您的方法从以下方式更改:

onBackButton_Clicked(sender: UIButton)

致:

onBackButton_Clicked(sender: UIBarButtonItem)

那确实有帮助,但我必须将其更改为 self.navigationController?.popViewControllerAnimated(true) - ADuggan
已更新答案 ;) 希望有所帮助。 - Joe Benton
“backBarButtonItem” 可能不适用于此处。相反,使用 Maxime Vantillard 在下面提到的自定义 “leftBarButtonItem”。在 iOS 中,“返回”按钮实际上是为最顶层控制器下面的控制器定义的。 - RajV

5
我建议重载返回按钮函数并检查历史记录。
override func viewDidLoad {
        super.viewDidLoad()
        self.navigationItem.hidesBackButton = true
        let newBackButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Bordered, target: self, action: "back:")
        self.navigationItem.leftBarButtonItem = newBackButton;
    }

    func back(sender: UIBarButtonItem) {
        if(webview.canGoBack) {
             webview.goBack()
        } else {
             self.navigationController.popViewController(animated:true)
        }
    }

0
你需要使用BackBarButton来: 1.浏览之前的网页 2.从第一个加载的网页返回到上一个控制器。 目前,NavigationBar上的BackButton似乎已经满足了后者的要求。你需要做的是添加一个自定义的BackButton
override func viewDidLoad()
{
    super.viewDidLoad()
    leftButton = UIButton(type: UIButtonType.Custom)
    leftButton.frame = CGRectMake(0, 0, 36, 36)
    leftButton.clipsToBounds = true
    leftButton.setImage(UIImage(named: "yourBackButton.png"), forState: .Normal) // add custom image
    leftButton.addTarget(self, action: "onBackButton_Clicked:", forControlEvents: UIControlEvents.TouchUpInside)
    let leftBarButton = UIBarButtonItem()
    leftBarButton.customView = leftButton
    self.navigationItem.leftBarButtonItem = leftBarButton
}

func onBackButton_Clicked(sender: UIButton)
{
    if(webview.canGoBack) {
        webview.goBack()
    }
    else {
        self.navigationController.popViewController(animated: true)
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接