我对Objective-C以及语法和一切都很新。我写了两个不同的方法,但遇到了错误:Duplicate declaration of method webView:shouldStartLoadWithRequest:navigationType:
所以,看起来我需要结合我的webView:shouldStartLoadWithRequest:navigationType:
方法。唯一的问题是,它们都包含if语句和返回值,这让我很困惑。这是两种方法:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *full = [request.URL absoluteString];
if ([full isEqualToString:@"ExampleURL.com"] || [full isEqualToString:@"ExampleURL.com"]
|| [full isEqualToString:@"ExampleURL.com"] ) {
return YES;
}
else
return NO;
}
和
-(BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSString *full = [request.URL absoluteString];
if ([full isEqualToString:@"ExampleURL.com"]) {
_backButton.hidden = YES;
return NO;
} else {
_backButton.hidden = NO;
}
return YES;
}
我一直试图将这两种方法结合在一起很长一段时间,而且我很茫然。这是if
语句让我沮丧。有谁知道我怎么做这个或它会是什么样子?
旁注:我希望的目标是只允许加载特定的网址。同时,我只需要在加载一个网站时隐藏后退按钮。有没有人知道是否有办法隐藏/显示基于URL的后退按钮,通过一起避免这种方法?我想我可能会犯这个错误。
答案 0 :(得分:3)
这里你想要的逻辑是什么? WebView开始加载时将调用一个方法。您将执行一些操作,然后根据您是否要继续加载来返回YES
或NO
。你不能告诉它可以加载然后告诉它同时加载是不行的。
在你的两种方法中你有这个:
if ([full isEqualToString:@"ExampleURL.com"] || ...snipped... ) {
return YES;
}
然后这个
if ([full isEqualToString:@"ExampleURL.com"]) {
// ...
return NO;
}
检查相同的东西,然后返回相反的值。
所以我会回答一下。这是这种方法的一般形式。
-(BOOL) webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
{
// alter application state
// return YES or NO
}
让我们说你想这样做,我不确定你想要什么,但这是一般的想法:
然后你可以这样实现这个方法:
-(BOOL) webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
{
if ([[request.URL host] isEqualToString:@"ExampleURL.com"]) {
_backButton.hidden = NO;
return YES;
} else {
_backButton.hidden = YES;
return NO;
}
}
现在调整它以反映您实际想要的逻辑。
答案 1 :(得分:2)
我认为你正在尝试做这样的事情:
-(BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType {
NSString *full = [request.URL absoluteString];
if([full isEqualToString:@"hidebackbuttonforthiswebsite.com"])
_backButton.hidden = YES;
if ([full isEqualToString:@"AcceptedURL1.com"] ||
[full isEqualToString:@"AcceptedURL2.com"] ||
[full isEqualToString:@"AcceptedURL3.com"])
{
// Good URL, load it
return YES;
}
else
{
// Bad URL, so don't load it
return NO;
}
}
这将隐藏特定URL的后退按钮,然后仅允许加载一组特定的URL。听起来这就是你想要的,但很难理解你的解释。
答案 2 :(得分:1)
我一般情况下,您可以考虑在方法中使用附加条件来确定要使用的条件树。 这可能是在这一个中调用的另一种方法。 如果需要一些标准来确定方法中的条件逻辑,您还可以考虑向方法参数添加其他参数。 另一个选择,如果你有两个方法由于它们做不同的事情而无法合并,但它们具有相同的参数列表,你应该更改选择器(方法签名)以区分它们并确保选择器指示它们以不同方式执行的操作。