Открывать ссылки в Safari вместо UIWebVIew? - PullRequest
27 голосов
/ 15 декабря 2010

У меня есть приложение с UIWebView внутри 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;
}

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

Есть идеи?

Ответы [ 7 ]

23 голосов
/ 15 декабря 2010

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

21 голосов
/ 24 августа 2012

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

@interface yourViewController : UIViewController
<UIWebViewDelegate>

Добавить в View did load

- (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;

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

1 голос
/ 13 апреля 2013

Установите для делегата 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;
}
0 голосов
/ 18 декабря 2015

Apple представила Safari View Controller на 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)
0 голосов
/ 23 апреля 2015

Добавить эту строку ( 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;
0 голосов
/ 20 марта 2014

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

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

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

0 голосов
/ 15 декабря 2010

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

target="blank"

И один знак вопроса будет хорошо, спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...