Открывать ссылки в Safari вместо UIWebVIew?

У меня есть приложение с UIWebView внутри a UIViewController. Я загружаю HTML из веб-службы в виде строки следующим образом:

self.webView loadHTMLString:_string baseURL:nil

Возможно ли, чтобы ссылки HTML в этой строке были открыты в браузере, а не в UIWebView в моем приложении? Как я могу это сделать?

Я пробовал это в UIViewController, что "размещает" UIWebVIew:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
   if (navigationType == UIWebViewNavigationTypeLinkClicked) {
     [[UIApplication sharedApplication] openURL:[request URL]];
     return NO;
   }
   return YES;
}

Кажется, он не работает.

Любые идеи?

Ответ 1

Установили ли вы делегат UIWebView на UIViewController? Нет ничего плохого в вашем коде, насколько я могу видеть, поэтому он может быть чем-то маленьким.

Ответ 2

Добавьте это в класс..

@interface yourViewController : UIViewController
<UIWebViewDelegate>

Добавьте это в View, загрузив

- (void)viewDidLoad
{
    [description loadHTMLString:string baseURL:nil];
        description.delegate = self;
}

Добавьте это в свой .m файл

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
    if ( inType == UIWebViewNavigationTypeLinkClicked ) {
        [[UIApplication sharedApplication] openURL:[inRequest URL]];
        return NO;
    }

    return YES;
}

Примечание:

UIWebView *description;
@synthesize description;

Тогда он будет работать отлично, как вы заслуживаете.!!:)

Ответ 3

Установите делегат UIWebView на ваш UIViewController, после чего используйте этот метод UIWebview и проверьте условие, например, теперь веб-просмотр текущего url - google.com, если предположить вы нажали на gmail, url содержит строку с gmail. Используйте приведенный ниже метод, и он открыл браузер Safari и автоматически загрузил этот URL-адрес.

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
    if ( inType == UIWebViewNavigationTypeLinkClicked ) {
        NSURL *url = [inRequest URL];
        if ([[url absoluteString] rangeOfString:@"gmail"].location == NSNotFound) {
            [[UIApplication sharedApplication] openURL:[inRequest URL]];
            return NO;
        }
    }
    return YES;
}

Ответ 4

Если вы уже правильно настроили UIWebViewDelegate, просто выполните

self.webView loadHTMLString:_string baseURL:nil
self.webView.delegate = self;

должен работать

Ответ 5

Добавьте эту строку (    self.webview.delegate = self; )

Для примера в viewController.m

NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
[self.webview loadHTMLString:htmlString baseURL:nil];
self.webview.delegate = self;

Ответ 6

Apple представила контроллер Safari View на iOS 9. Safari View Controller предлагает все функции, которые пользователь ожидает от Safari для вашего приложения, даже не покидая его.

Сначала нам нужно импортировать Safari Services

#import <SafariServices/SafariServices.h>

Для цели C: -

NSString *yourUrl = @"http://yourURL";
SFSafariViewController *svc= [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString: yourUrl]];
[self presentViewController:svc animated:YES completion:nil];

Для Swift: -

let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!)
self.presentViewController(svc, animated: true, completion: nil)

Ответ 7

Да, в теге гиперссылки добавьте

target="blank"

И один вопросительный знак будет прекрасным, спасибо