3

これは奇妙なもののようです。それが可能かどうかさえわかりません!!

ローカルのhtmlページをロードするUIWebViewがあります。このhtmlページにボタンがあります。

ボタンをクリックしてから、XcodeでIBActionを呼び出します。

どうすればいいですか?またはあなたもこれを行うことができますか?

みんなありがとう、

ステファン。

4

3 に答える 3

8

カスタムプロトコルを使用してそれを行うことができます。あなたのhtmlファイルでは、のようなものにリンクすることができますmyProtocol://callSomeAction

次に、UIWebViewDelegate(おそらくあなたのUIViewController)に、次のメソッドを実装する必要があります。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

(ここのドキュメント)

requestそのコードでは、パラメータのデータに基づいてプロトコルを検出するという考え方です。の場合はmyProtocol、を呼び出してIBAction戻ることができますNO。それ以外の場合は、フォールバックしてWebビューにページをロードさせ、を返すだけYESです。

コードは次のようになります。

- (BOOL)webView:(UIWebView *)webView
    shouldStartLoadWithRequest:(NSURLRequest *)request 
    navigationType:(UIWebViewNavigationType)navigationType {

    NSString* scheme = [[request URL] scheme];
    if ([@"myProtocol" isEqual:scheme]) {
        // Call your method
        return NO;
    } else {
        return YES;
    }
}
于 2010-11-08T12:48:21.113 に答える
3
  1. HTMLページのボタンで、などのカスタムURLを開きますmyapp://buttonclick

  2. Webビューデリゲートで、を実装しwebView:shouldStartLoadWithRequest:navigationType:ます。リクエストにカスタムURLが含まれているかどうかを確認し、含まれている場合は、必要なObj-Cメソッドを呼び出します。

于 2010-11-08T12:48:10.413 に答える
0

私も同じような状況ですが、そのimageclick、href、およびこのWebビューの方法の処理

- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id < WebPolicyDecisionListener >)listener{

    NSString *host = [[request URL] host];
    //if (host!=nil) 
    {




    WebNavigationType eActionType = (WebNavigationType)[[actionInformation valueForKey:WebActionNavigationTypeKey] intValue];
    NSURL *pOrignalURL;
    if(eActionType == WebNavigationTypeLinkClicked)// == [actionInformation valueForKey:WebActionNavigationTypeKey])
    {
        /* we will handle it */
        pOrignalURL = [actionInformation valueForKey:WebActionOriginalURLKey];
        NSString *pElementName = [actionInformation valueForKey:WebActionElementKey];

        if([[pOrignalURL absoluteString] hasPrefix:@"app:"]){

            [listener ignore];
            return;
        }
    }
    //[[NSWorkspace sharedWorkspace] openURL:pOrignalURL];
    NSArray* urls = [ NSArray arrayWithObject:
                     [ NSURL URLWithString:[pOrignalURL absoluteString]]];

    [[ NSWorkspace sharedWorkspace ]
     openURLs:urls
     withAppBundleIdentifier:nil
     /* use default system bindings */
     options:NSWorkspaceLaunchWithoutActivation
     additionalEventParamDescriptor:nil
     launchIdentifiers:nil ];


     /* default behavior */
[listener download];




    return;
    }
}
于 2011-11-11T14:42:29.920 に答える