Swift - 带导航栏后退按钮的 Webview 后退按钮
Swift - UIWebview back button with NavigationBar Back Button
目前,我正在使用 uiwebview 上的按钮返回用户搜索的每个网页,并且效果很好。但是有没有办法使用导航栏后退按钮返回到之前的网页,当没有更多的页面可以返回时打开之前的视图控制器?
这是我用来返回的代码,它刚刚连接到一个 UIButton。
// Back button events
func onBackButton_Clicked(sender: UIButton)
{
if(webview.canGoBack)
{
webview.goBack()
}
}
任何帮助都会很棒。
添加到您的代码中,您可以添加一个 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)
我建议重载后退按钮功能并检查历史记录。
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)
}
}
您需要使用 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)
}
}
目前,我正在使用 uiwebview 上的按钮返回用户搜索的每个网页,并且效果很好。但是有没有办法使用导航栏后退按钮返回到之前的网页,当没有更多的页面可以返回时打开之前的视图控制器?
这是我用来返回的代码,它刚刚连接到一个 UIButton。
// Back button events
func onBackButton_Clicked(sender: UIButton)
{
if(webview.canGoBack)
{
webview.goBack()
}
}
任何帮助都会很棒。
添加到您的代码中,您可以添加一个 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)
我建议重载后退按钮功能并检查历史记录。
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)
}
}
您需要使用 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)
}
}