SFSafariViewController не повторно открывает встроенную URL-ссылку веб-просмотра

У меня есть Webview со встроенными URL-ссылками, которые открываются с помощью SFSafariViewController, как показано ниже:

-(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, я правильно возвращаюсь к моему веб-просмотру. Проблема в том, что если я снова нажму на ту же встроенную ссылку, она откроется не с помощью SFSafariViewController, а в Webview, чего я не хочу. Я попытался принудительно перезагрузить Webview в safariViewControllerDidFinish, но безуспешно.

Не могли бы вы помочь? Спасибо!


person George Milissis    schedule 04.06.2016    source источник
comment
Разве вы не хотите возвращать NO в конце блока if ([SFSafariViewController class] != nil)?   -  person beyowulf    schedule 04.06.2016
comment
Это сработало! Большое спасибо за оперативную помощь.   -  person George Milissis    schedule 04.06.2016


Ответы (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!!!");
}
person George Milissis    schedule 04.06.2016