Iphone 使用HTML页面上的按钮调用xcode iAction

Iphone 使用HTML页面上的按钮调用xcode iAction,iphone,html,xcode,uiwebview,ibaction,Iphone,Html,Xcode,Uiwebview,Ibaction,这看起来很奇怪。甚至不确定这是否可能 我有一个加载本地html页面的UIWebView。在这个html页面上,我有一个按钮 我想单击按钮,然后在Xcode中调用iAction 我该怎么办?或者你能做到这一点 谢谢各位 斯特凡 让HTML页面上的按钮打开自定义url,如myapp://buttonclick 在web视图代理中,实现webView:shouldStartLoadWithRequest:navigationType:。检查请求是否包含自定义URL,如果包含自定义URL,则调用所需的任

这看起来很奇怪。甚至不确定这是否可能

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

我想单击按钮,然后在Xcode中调用iAction

我该怎么办?或者你能做到这一点

谢谢各位

斯特凡

  • 让HTML页面上的按钮打开自定义url,如
    myapp://buttonclick

  • 在web视图代理中,实现
    webView:shouldStartLoadWithRequest:navigationType:
    。检查请求是否包含自定义URL,如果包含自定义URL,则调用所需的任何Obj-C方法


  • 您可以通过使用自定义协议来实现。在html文件中,可以链接到类似
    myP的内容rotocol://callSomeAction

    然后在您的
    UIWebViewDelegate
    (可能是您的
    UIViewController
    )上,您必须实现名为:

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

    其思想是,在该代码上,根据
    请求
    参数中的数据检测协议。如果是
    myProtocol
    ,您可以调用
    iAction
    并返回
    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;
        }
    }
    

    我也有类似的情况,但这是一个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;
        }
    }
    
    -(void)webView:(webView*)webView决策fornavigationAction:(NSDictionary*)操作信息请求:(NSURLRequest*)请求帧:(WebFrame*)帧决策侦听器:(id)侦听器{
    NSString*host=[[request URL]host];
    //如果(主机!=nil)
    {
    WebNavigationType eActionType=(WebNavigationType)[[actionInformation valueForKey:WebActionNavigationTypeKey]intValue];
    NSURL*pOrignalURL;
    如果(eActionType==WebNavigationTypeLinkClicked)/==[actionInformation valueForKey:WebActionNavigationTypeKey])
    {
    /*我们会处理的*/
    pOrignalURL=[actionInformation valueForKey:WebActionOriginalURLKey];
    NSString*pElementName=[actionInformation valueForKey:WebActionElementKey];
    如果([[pOrignalURL absoluteString]hasPrefix:@“app:”){
    [听者忽略];
    返回;
    }
    }
    //[[NSWorkspace sharedWorkspace]openURL:pOrignalURL];
    NSArray*URL=[NSArray arrayWithObject:
    [NSURL URLWithString:[pOrignalURL absoluteString]];
    [[NSWorkspace sharedWorkspace]
    OpenURL:URL
    withAppBundleIdentifier:nil
    /*使用默认系统绑定*/
    选项:NSWorkspaceLaunchwithout未激活
    additionalEventParamDescriptor:无
    启动标识符:无];
    /*默认行为*/
    [收听者下载];
    返回;
    }
    }
    
    你能告诉我哪里出了问题吗?我试过上述方法,但似乎不起作用。这是我的HTML。这是我的目标-C.-(BOOL)webView:(UIWebView*)webView shouldwithrequest:(NSURLRequest*)request navigationType:(UIWebView navigationType)navigationType{if(navigationType==UIWebViewNavigationTypeLinkClicked){[self video1];返回NO;}返回YES;}你能告诉我这是怎么做的吗。因为我不太明白。谢谢你,我的朋友是个英雄!万分感谢!Thax感谢您的帮助,它有很多帮助:)如果任何人在使其工作时遇到问题,请检查您是否已将
    UIWebView
    的委托设置为
    self
    。我花了很长时间绕圈子,因为我忘了这么做。和@pgb感谢您的解决方案。@Isuru您的回答是正确的,您需要设置委托。但是,将其设置为self在您的上下文中起作用(self可能是视图控制器),但在其他上下文中可能会失败。我将其表述为:将web视图的委托设置为实现上述方法的类。