Как я могу открыть View Controller, когда UIWebView (посредством Java) распознает щелчок на изображении? - PullRequest
1 голос
/ 23 июня 2011

У меня есть HTML-код, который говорит следующее:

<html>
<head>
    <meta name=viewport content=width=320/>
    <script>
        function imageClicked(){
            var clicked=true;
            window.location="/click/"+clicked;
        }
        </script>
</head>
<body>
    <center><h1>This is Page One</h1></center>
    <center><a href="javascript:void(0)" onMouseDown="imageClicked()"><IMG SRC="divers-circle.jpg">
        </a></center>
       </center><br><br>
    <center>Scuba divers</center>
</body>
</html>

HTML-код правильно загружен в UIWebView, поскольку это локальный файл:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:((WebPageObj *)obj).webPath ofType:@"html"]isDirectory:NO]]];


    webView.dataDetectorTypes = UIDataDetectorTypeAll;

Теперь, когда я нажимаю на изображение, оно распознает щелчок, но как я могу реализовать действие в XCode, например, открыть другое представление или предупреждение?

Кстати, я сделал это на основе учебника, который объясняет некоторые концепции, вот ссылка: http://www.codeproject.com/KB/iPhone/iPhoneDevReader.aspx

Однако он создал HTML-код в XCode, и в моем случае я загрузил HTML-код, поэтому мне нужно как-то прочитать скрипт в HTML-коде, чтобы включить следующее:

if ( [request.mainDocumentURL.relativePath isEqualToString:@"/click/false"] ) {    
        NSLog( @"not clicked" );
        return false;
    }

    if ( [request.mainDocumentURL.relativePath isEqualToString:@"/click/true"] ) {        //the image is clicked, variable click is true
        NSLog( @"image clicked" );

        UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"JavaScript called" 
               message:@"You've called iPhone provided control from javascript!!" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil];
        [alert show];
        [alert release];
        return false;
    }

    return true;
}

Какой метод поможет мне это сделать? и куда я должен поместить его, так как я использую ScrollView, а затем загружаю WebView, когда вызывается страница.

Заранее спасибо.

1 Ответ

0 голосов
/ 23 июня 2011

Вам необходимо установить делегата для вашего UIWebView.

Если вы установите делегата для вашего UIWebView, то каждый раз, когда ваше веб-представление отправляет запрос, будет вызываться следующий метод:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
    NSURL *url = [request URL];
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
            if ([[url scheme] isEqualToString:@"click"]) {
               // do whatever you want here to happen after the click
            }
            return NO;
    } else {
       return YES;
    }
}

Чтобы сделать его как можно более простым, измените HTML-код на следующий (Javascript не требуется):

  <html>
    <head>
        <meta name=viewport content=width=320/>
    </head>
    <body>
        <center><h1>This is Page One</h1></center>
        <center><a href="click://"><IMG SRC="divers-circle.jpg"></a></center>
        <br><br>
        <center>Scuba divers</center>
    </body>
    </html>

При нажатии на изображение происходит следующее:

  1. WebViewотправляет запрос с URL-адресом «click: //».
  2. Метод делегата UIWebView webView: shouldStartLoadWithRequest: navigationType: вызывается
  3. в выражениях 2 «if» этого метода оценивается как «ДА », поскольку запрос произошел после щелчка (navigationType == UIWebViewNavigationTypeLinkClicked) и схема URL« click »

Подробнее о протоколе UIWebViewDelegate здесь .

...