如何仅在我的 UIWebView 中单击 link 时启用我的后退按钮? (代码不会执行)
How do I enable my back button only when a link is clicked in my UIWebView? (Code won't execute)
我正在努力使后退按钮仅在用户按下 link and/or if canGoBack = TRUE 时启用。我尝试在正文中使用 if 语句,但这没有用。然后我尝试使用我可以在网上找到的东西,但它仍然没有用。我的代码如下。我究竟做错了什么?谢谢!
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest: (NSURLRequest *)request navigationType: (UIWebViewNavigationType)navigationType{
if (navigationType == UIWebViewNavigationTypeLinkClicked)
{
NSString *url = webView.request.URL.absoluteString;
NSURL *nsurl = [NSURL URLWithString:url];
NSURLRequest *nsrequest = [NSURLRequest requestWithURL:nsurl];
[webView loadRequest:nsrequest];
backButton.enabled = TRUE;
}
return TRUE;
}
UIWebView
和 WKWebView
上面都有 canGoBack
和 canGoForward
属性。您可以使用 KVO 查看这些功能何时启用,并相应地 enable/disable 您的后退和前进按钮。
如果您尚未设置 Web 视图的委托,则不会调用 shouldStartLoadWithRequest()。
为了使用 UIWebView,它通常设置为视图控制器的出口 属性,所以您应该有这样的东西:
IBOutlet UIWebView* webView;
webView 有一个委托 属性 需要设置到您的视图控制器,您可以在故事板中设置委托,但在代码中设置它更明确:
- (void)viewDidLoad
{
[super viewDidLoad];
self.webView.delegate = self;
99% 的时间你只是设置委托,但 UIWebView 的委托很有趣,因为它需要在完成后设置为 nil。所以添加:
- (void)viewDidUnload
{
[self.webView stopLoading];
self.webView.delegate = nil;
我正在努力使后退按钮仅在用户按下 link and/or if canGoBack = TRUE 时启用。我尝试在正文中使用 if 语句,但这没有用。然后我尝试使用我可以在网上找到的东西,但它仍然没有用。我的代码如下。我究竟做错了什么?谢谢!
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest: (NSURLRequest *)request navigationType: (UIWebViewNavigationType)navigationType{
if (navigationType == UIWebViewNavigationTypeLinkClicked)
{
NSString *url = webView.request.URL.absoluteString;
NSURL *nsurl = [NSURL URLWithString:url];
NSURLRequest *nsrequest = [NSURLRequest requestWithURL:nsurl];
[webView loadRequest:nsrequest];
backButton.enabled = TRUE;
}
return TRUE;
}
UIWebView
和 WKWebView
上面都有 canGoBack
和 canGoForward
属性。您可以使用 KVO 查看这些功能何时启用,并相应地 enable/disable 您的后退和前进按钮。
如果您尚未设置 Web 视图的委托,则不会调用 shouldStartLoadWithRequest()。
为了使用 UIWebView,它通常设置为视图控制器的出口 属性,所以您应该有这样的东西:
IBOutlet UIWebView* webView;
webView 有一个委托 属性 需要设置到您的视图控制器,您可以在故事板中设置委托,但在代码中设置它更明确:
- (void)viewDidLoad
{
[super viewDidLoad];
self.webView.delegate = self;
99% 的时间你只是设置委托,但 UIWebView 的委托很有趣,因为它需要在完成后设置为 nil。所以添加:
- (void)viewDidUnload
{
[self.webView stopLoading];
self.webView.delegate = nil;