在Safari中拦截URL和打开URL

时间:2011-05-28 17:08:11

标签: iphone objective-c uitableview uitextview

我通过执行以下操作拦截了网址:

- (BOOL)openURL:(NSURL *)url{
    URLViewController * web = [[URLViewController alloc] init];
    web.url = url;
    UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:web];
    [nav.navigationBar setTintColor:[UIColor blackColor]];
    [nav setModalPresentationStyle:UIModalPresentationFormSheet];
    [self.detailViewController presentModalViewController:nav animated:NO];
    [web release];
    [nav release];
    return YES;
}

我有一个UITextView,用于检测URL,当点击URL时,它会打开ModalViewController中的链接。有关正在发生的事情的详细信息可以看here。现在的问题是,如果我想在safari中打开一个URL,它仍然可能吗?

1 个答案:

答案 0 :(得分:4)

您应该添加一个override标记,指示您是否要进行控制。

@interface MyApplication : UIApplication {

}

-(BOOL)openURL:(NSURL *)url withOverride:(BOOL)override;

@end

@implementation MyApplication


-(BOOL)openURL:(NSURL *)url withOverride:(BOOL)override {
    if ( !override ) {
        return [super openURL:url];
    }

    if  ([self.delegate openURL:url]) {
        return YES;
    } else {
        return [super openURL:url];
    }
}

-(BOOL)openURL:(NSURL *)url{
    return [self openURL:url withOverride:YES];
}
@end

所以现在你要绕过的所有电话都可以像这样发送。

[[MyApplication sharedApplication] openURL:url withOverride:NO];

原始答案

这是你应该做的。把它放在return YES;陈述之前。

if ( [super canOpenURL:aURL] ) {
    return [super openURL:aURL];
}