UIWebView, привязывающий действие к ссылке href - PullRequest
1 голос
/ 08 февраля 2012

У нас есть всплывающее окно «О нашем приложении», отформатированное в формате html и, по сути, UIWebView во всплывающем окне. Также есть ссылка на наш сайт. Проблема в том, что если вы нажмете на ссылку, она просто откроет наш веб-сайт во всплывающем окне. Есть ли способ изменить то, что происходит с этой ссылкой, например, открыть Safari, чтобы он был в полном браузере, или, по крайней мере, увеличить размер всплывающего окна, поскольку наше окно «О нашем приложении» невелико.

Ответы [ 3 ]

2 голосов
/ 08 февраля 2012

Да, это сообщение дает следующий код для каждого http, https и mailto call, который открывается в Safari:

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request    navigationType:(UIWebViewNavigationType)navigationType; 
{
    NSURL *requestURL =[ [ request URL ] retain ]; 
    if ( ( [ [ requestURL scheme ] isEqualToString: @"http" ] || [ [ requestURL scheme ] isEqualToString: @"https" ] || [ [ requestURL scheme ] isEqualToString: @"mailto" ]) 
             && ( navigationType == UIWebViewNavigationTypeLinkClicked ) ) { 
       return ![ [ UIApplication sharedApplication ] openURL: [ requestURL autorelease ] ]; 
    } 
    [ requestURL release ]; 
    return YES; 
}

Вы можете изменить только определенные URL-адреса, получив URL-адресиз запроса.

2 голосов
/ 08 февраля 2012

Я использую этот код для открытия URL через UIWebView:

- (BOOL)webView:(UIWebView *)webView_ shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    self.curURL = request.URL;

    if ([request.URL.scheme isEqualToString:@"file"])
    {
        return YES;
    }

    UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle:nil
                                                              delegate:self
                                                     cancelButtonTitle:nil
                                                destructiveButtonTitle:@"Cancel"
                                                     otherButtonTitles:@"Open in Safari", nil];
    [actionSheet showInView:self.view];
    [actionSheet release];

    return NO;
}


#pragma mark -
#pragma mark Action sheet delegate methods


- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if(buttonIndex == actionSheet.firstOtherButtonIndex + eSafariButtonIndex)
    {
        [[UIApplication sharedApplication] openURL:self.curURL];    
    }
}
0 голосов
/ 08 февраля 2012

Проверяли ли вы метод - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType делегата UIWebView?

Веб-просмотр должен спрашивать своего делегата каждый раз, когда он загружает другой фрейм / страницу, поэтому, если вы нажмете на ссылку, метод будет вызван.

Тогда вам просто нужно вернуть NO и обработать запрос так, как вы хотите!

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