除非点按两次按钮,否则不会加载iOS网页

时间:2012-07-28 21:29:12

标签: iphone html ios uiwebview nsstring

- (IBAction)saveButton:(id)sender
{
    NSURL *yourURL = [NSURL URLWithString: webpageURLLabel.text ];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:yourURL];
    if ([self checkURL] == YES) {
        [webpagePreview loadRequest:request];
        webpagePreview.scalesPageToFit = YES;
    }
}

- (BOOL)checkURL
{
    NSString *arrayOfStrings = [NSArray arrayWithObjects:@"http://", @"https://", nil];
    NSString *stringToSearchWithin = webpageURLLabel.text;

    BOOL found=NO;
    for (NSString *s in arrayOfStrings)
    {
        if ([stringToSearchWithin rangeOfString:s].location != NSNotFound)
        {
            found = YES;
            break;
        } else
        {
            webpageURLLabel.text = [NSString stringWithFormat:@"http://%@", webpageURLLabel.text];
            found = YES;
            break;
        }
    }
    return found;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    webpageTitleLabel.text = [webpagePreview stringByEvaluatingJavaScriptFromString:@"document.title"];
}

我调试了它,看起来好像要加载。但由于某些原因,当你第一次点击按钮时,没有任何反应。

如果用户再次点击该按钮,则可以正常工作。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

在我看来,第一次点击按钮时,webpageURLLabel.text可能没有有效的网址,因此请求无效。然后,当调用[self checkURL]时,webpageURLLabel.text会设置为有效的网址,因此下次点击会有效。

也许您应该在创建-checkURL之前致电NSURLRequest

答案 1 :(得分:1)

checkURL也存在问题。请注意,它始终返回YES。 for循环内部是逻辑,减少到:

if (some condition) {
    found = YES;
    break;
} else {
    // Fix webpageURLLabel.text
    found = YES;
    break;
}

但是,请考虑如果您的有效条目以@"https://"开头会发生什么。第一次循环时,if条件失败,因此@"http://"被添加到URL的前面并返回。因此@"https://valid.com"变为@"http://https://valid.com"。您需要在for循环外的else中移动所有内容,并且只有在找不到的情况下才执行此操作。