【问题标题】:SFSafariViewController does not reopen a webview inline URL linkSFSafariViewController 不会重新打开 webview 内联 URL 链接
【发布时间】:2016-06-04 17:30:18
【问题描述】:

我有一个使用 SFSafariViewController 打开的带有内联 URL 链接的 Webview,如下所示:

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
    if ( inType == UIWebViewNavigationTypeLinkClicked ) {
        if ([SFSafariViewController class] != nil) {
            NSString *inR = [[inRequest URL] absoluteString];
            NSURL *inReq = [NSURL URLWithString:inR];
            SFSafariViewController *safariVC = [[SFSafariViewController alloc] initWithURL:inReq entersReaderIfAvailable:YES];
            safariVC.delegate = self;
            [self presentViewController:safariVC animated:YES completion:nil];
        } else {
            [[UIApplication sharedApplication] openURL:[inRequest URL]];
            return NO;
        }
    }
    return YES;
}

#pragma mark - SFSafariViewController delegate methods
-(void)safariViewController:(SFSafariViewController *)controller didCompleteInitialLoad:(BOOL)didLoadSuccessfully {
    // Load finished

}

-(void)safariViewControllerDidFinish:(SFSafariViewController *)controller {
    // Done button pressed
    NSLog(@"DONE PRESSED!!!");
}

当我按 DONE 按钮正确返回到我的 Webview。问题是,如果我再次按下同一个内联链接,它不会用 SFSafariViewController 打开,而是在 Webview 中打开,这不是我想要的。我试图在 safariViewControllerDidFinish 中强制重新加载 Webview,但没有成功。

你能帮忙吗?谢谢!

【问题讨论】:

  • 您不想在if ([SFSafariViewController class] != nil) 块的末尾返回NO 吗?
  • 成功了!非常感谢您的及时协助。

标签: ios objective-c webview sfsafariviewcontroller


【解决方案1】:

代码更正如下(遵循 beyowulf 的建议),现在可以正常工作了:

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
    if ( inType == UIWebViewNavigationTypeLinkClicked ) {
        if ([SFSafariViewController class] != nil) {
            NSString *inR = [[inRequest URL] absoluteString];
            NSURL *inReq = [NSURL URLWithString:inR];
            SFSafariViewController *safariVC = [[SFSafariViewController alloc] initWithURL:inReq entersReaderIfAvailable:YES];
            safariVC.delegate = self;
            [self presentViewController:safariVC animated:YES completion:nil];
            return NO;
        } else {
            [[UIApplication sharedApplication] openURL:[inRequest URL]];
            return NO;
        }
    } else {
        return YES;
    }
}

#pragma mark - SFSafariViewController delegate methods
-(void)safariViewController:(SFSafariViewController *)controller didCompleteInitialLoad:(BOOL)didLoadSuccessfully {
    // Load finished
}

-(void)safariViewControllerDidFinish:(SFSafariViewController *)controller {
    // Done button pressed
    NSLog(@"DONE PRESSED!!!");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-27
    • 2020-03-30
    • 1970-01-01
    • 2012-05-08
    • 2016-03-19
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    相关资源
    最近更新 更多