【问题标题】:Use a button on a HTML page to call xcode IBAction使用 HTML 页面上的按钮调用 xcode IBAction
【发布时间】:2010-11-08 12:44:30
【问题描述】:

这看起来很奇怪。不知道有没有可能!!

我有一个加载本地 html 页面的 UIWebView。在这个 html 页面上,我有一个按钮。

我想点击按钮,然后在 Xcode 中调用 IBAction。

我该怎么做呢?或者你甚至可以这样做吗???

谢谢大家,

斯特凡。

【问题讨论】:

    标签: iphone html xcode uiwebview ibaction


    【解决方案1】:

    您可以使用自定义协议来做到这一点。在您的 html 文件中,您可以链接到 myProtocol://callSomeAction 之类的内容。

    然后在您的UIWebViewDelegate(可能是您的UIViewController)上,您必须实现调用的方法:

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

    (文档here

    想法是,在该代码上,您可以根据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;
        }
    }
    

    【讨论】:

    • 你能告诉我这是怎么做的吗?因为我完全想不通。谢谢。
    • 你我的朋友是英雄!谢谢一百万!
    • 感谢您的帮助,它有很大帮助:)
    • 如果有人在让它工作时遇到问题,请检查您是否已将 UIWebView 的委托设置为 self。我花了很长时间在灌木丛中拐弯抹角,因为我忘了这样做。还有@pgb 感谢您的解决方案。
    • @Isuru 你是对的,你需要设置委托。但是,将其设置为 self 在您的上下文中有效(其中 self 可能是视图控制器),但对其他人可能会失败。我将其声明为:将 Web 视图的委托设置为实现上述方法的类。
    【解决方案2】:
    1. 让 HTML 页面上的按钮打开一个自定义 URL,例如 myapp://buttonclick

    2. 在您的 Web 视图委托中,实现 webView:shouldStartLoadWithRequest:navigationType:。检查请求是否包含您的自定义 URL,如果包含,请调用您想要的任何 Obj-C 方法。

    【讨论】:

    • 你能告诉我哪里出错了吗?我已经尝试了上述方法,但它似乎不起作用。这是我的 HTML。
    【解决方案3】:

    我也有类似的情况,不过是imageclick、href和webview的处理方法,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      相关资源
      最近更新 更多