Перехват URL и начальный URL в Safari - PullRequest
3 голосов
/ 28 мая 2011

Я перехватил открытие URL, выполнив следующее:

- (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. Полную информацию о том, что происходит, можно увидеть здесь . Теперь вопрос в том, что если я захочу открыть URL-адрес в Safari, это все еще возможно?

1 Ответ

4 голосов
/ 28 мая 2011

Вы должны добавить флаг 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];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...