【发布时间】:2011-01-20 00:53:36
【问题描述】:
我是 iPhone 新手。我想禁用 UIWebView 中 UIToolBar 上的后退(左箭头按钮)和前进(右箭头按钮)按钮。移动网页后要启用后退按钮,然后在需要时启用前进按钮。在我的应用程序中,我通过界面生成器使用底部的工具栏。请任何人帮助我!
【问题讨论】:
我是 iPhone 新手。我想禁用 UIWebView 中 UIToolBar 上的后退(左箭头按钮)和前进(右箭头按钮)按钮。移动网页后要启用后退按钮,然后在需要时启用前进按钮。在我的应用程序中,我通过界面生成器使用底部的工具栏。请任何人帮助我!
【问题讨论】:
对于在WKWebView 中努力解决此问题的开发人员,您需要实现KVO 以在viewDidLoad 方法中观察WKWebView 的canGoBack 和canGoForward 属性。
webView.addObserver(self, forKeyPath: #keyPath(WKWebView.canGoBack), options: .new, context: nil)
webView.addObserver(self, forKeyPath: #keyPath(WKWebView.canGoForward), options: .new, context: nil)
在观察者方法中
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == #keyPath(WKWebView.canGoBack) || keyPath == #keyPath(WKWebView.canGoForward) {
backButton.isEnabled = webView.canGoBack
forwardButton.isEnabled = webView.canGoForward
}
}
另外,不要忘记在 ViewController 被释放时移除观察者。
【讨论】:
Swift 的两行解决方案:
func webViewDidFinishLoad(_ webView: UIWebView) {
btnBack.isEnabled = webView.canGoBack
btnForward.isEnabled = webView.canGoForward
}
【讨论】:
除了 pheelick 的回答之外,我必须进行以下更改,以在您返回第一页时禁用后退按钮,在您转到最后一页时禁用前进按钮。
在 WebHistoryItemChangedNotification 上添加了一个观察者。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(webViewHistoryDidChange:)
name:@"WebHistoryItemChangedNotification"
object:nil];
在 webViewHistoryDidChange 中更新按钮状态。
- (void)webViewHistoryDidChange
{
if ([theWebView canGoBack])
{
self.backButton.enabled = YES;
}
else
{
self.backButton.enabled = NO;
}
if ([theWebView canGoForward])
{
self.forwardButton.enabled = YES;
}
else
{
self.forwardButton.enabled = NO;
}
}
【讨论】:
只需在 webView 的委托方法之一中实现即可。
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
if ([webView canGoBack])
[backbutton setEnabled:YES];
else
[backbutton setEnabled:NO];
if ([webView canGoForward])
[fwdbutton setEnabled:YES];
else
[fwdbutton setEnabled:NO];
}
【讨论】:
向按钮对象发送以下消息以启用/禁用:
// Enable
[myButton setEnabled:YES];
// Disable
[myButton setEnabled:NO];
要确定是否应该显示这些按钮,您应该检查 webview 上的以下属性:
[myWebView canGoBack];
[myWebView canGoForward];
您需要在用户加载页面时检查这些内容。为此,请实现 UIWebViewDelegate 方法 webViewDidFinishLoad:
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
// Enable or disable back
[myBackButton setEnabled:[myWebView canGoBack]];
// Enable or disable forward
[myForwardButton setEnabled:[myWebView canGoForward]];
}
【讨论】: