2013-12-06 1 views
3

есть возможность получить номер, обнаруженный в UIWebView.Как получить обнаруженный номер в UIWebView

Когда я нажимаю номер внутри UIWebView на моем IPad я получаю поповер со следующими выборами:

Отправить сообщение, Добавить в список контактов, Копировать.

Как удалить этот popover и получить обнаруженный номер?

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0,100,1024,768)]; 
webView.dataDetectorTypes = UIDataDetectorTypePhoneNumber; 
NSURL *url = [NSURL URLWithString:@"somepage"]; 
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; 
[webView loadRequest:urlRequest]; 

UIWebView определяет номера телефонов и когда я нажимаю на номер, система показывает мне поповер.

Интересно, что ни один из методов UIWebViewDelegate не вызван, когда я нажимаю на номер.

Мне нужно только получить обнаруженное число.

+0

Нам действительно нужно увидеть ваш существующий код, прежде чем мы сможем дать вам хороший ответ, но ваш первый порт вызова, вероятно, будет методом, который обрабатывает щелчок. – Robert

ответ

-1

Используйте следующий способ делегат обнаружить номер телефона:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request 
              navigationType:(UIWebViewNavigationType)navigationType 
{ 
    if ([url.scheme isEqualToString:@"tel"]) 
    { 
     [[UIApplication sharedApplication] openURL:url]; 
    } 
} 

Вот ссылка нить: UIWebView doesn't detect phone number links

1

Стоп обнаруживая цифры и иметь их в качестве ссылок вместо. Поэтому, когда вы нажмете ссылку (Number), вы попадете в метод shouldStartLoadWithRequest.

Код, приведенный ниже, должен помочь мне прокомментировать детали, что каждая строка делает, если вам нужно что-то еще, просто спросите.

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request 
             navigationType:(UIWebViewNavigationType)navigationType 
{ 
    static NSString *urlPrefix = @"tel://"; 
    NSString *url = [[request url] absoluteString]; // Notice that we are getting the obsoluteString of the url 
    if([url hasPrefix:urlPrefix]) { // We then check that the url has a prefix of our urlPrefix otherwise why bother doing anything at all. 
     if([[UIApplication sharedApplication] canOpenUrl:url]) { // This is to check that we can actually open a url as iPads can't make phone calls. 
      [[UIApplication sharedApplication] openUrl:url]; // And if everything is successful we are good to make the phone call. 
      return NO; // We don't want the UIWebView to go navigating somewhere crazy so tell it to stop navigating away. 
     } else { 
      return NO; // If it does contain the prefix but we can't open the url we don't want to navigate away so return NO. 
     } 
    } 

    return YES; // If all else fails it most be a standard request so return YES. 
} 

код будет работать на ссылку, как:

<p>Call us on:<a href="tel://12345678900">12345678900</a></p> 

UPDATE

Я просто понял, что вы не настройки вашего webView сек делегата. Так что в вашем файле .h убедитесь, что вы:

@interface MyClassName : MySuperClass <UIWebViewDelegate> // Obviously 'MyClassName' and MySuperClass' you need to replace with your classes. 

затем после UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0,100,1024,768)]; вам нужно сделать [webView setDelegate:self]; это настроить его так, он должен использовать методы делегата.

Если у вас есть другие вопросы, просто оставьте комментарий.

+2

Приложение никогда не входит в этот метод делегата, когда URL начинается с «tel:». Вместо этого отображается только popover и не вводится в метод делегата. –

+0

@ user3074207 Я думаю, это может быть потому, что вы все еще обнаруживаете номера телефонов ('UIDataDetectorTypePhoneNumber'), останавливая их обнаружение, чтобы превратить его в обычную ссылку. Я также заметил, что вы не установили делегат 'webViews', выполняющий' [webView setDelegate: self]; 'после инициализации webview. Проверьте мой UPDATE – Popeye

+1

Как говорит Никола Николич, методы делегата не вызывают на iPad. На iPhone все работает отлично. Но на iPad даже с набором делегатов (и обнаружением отключено - хотя это не имеет значения, если у вас действительно есть tel: link - как и мой случай), метод shouldStartLoadWithRequest: обходит для tel: links. Вместо этого появляется popover. Есть идеи? – Gik