Используйте кнопку на HTML -странице, чтобы вызвать Xcode Ibaction

StackOverflow https://stackoverflow.com/questions/4123921

Вопрос

Это кажется странным. Даже не уверен, возможно ли это !!

У меня есть UIWebView, которая загружает локальную HTML -страницу. На этой HTML -странице у меня есть кнопка.

Я хочу нажать на кнопку, а затем вызовать ibaction в XCode.

Как я бы сделал это? Или ты можешь даже сделать это ???

Спасибо, парни,

Стефан.

Это было полезно?

Решение

Вы можете сделать это с помощью пользовательского протокола. В вашем html -файле вы можете ссылаться на что -то вроде myProtocol://callSomeAction.

Тогда на вашем UIWebViewDelegate (Наверное, ваш UIViewController) вы должны реализовать метод под названием:

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

(Документы здесь)

Идея состоит в том, что в этом коде вы обнаруживаете протокол на основе данных в request параметр. Если это myProtocol, вы можете позвонить своему IBAction и вернуться NO. Анкет Если это что -то еще, вы заплатите, чтобы веб -представление загрузила страницу и просто верните 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;
    }
}

Другие советы

  1. Иметь кнопку на странице HTML Откройте пользовательский URL, такой как myapp://buttonclick.

  2. В вашем веб -представлении делегат, реализовать webView:shouldStartLoadWithRequest:navigationType:. Анкет Проверьте, включает ли запрос ваш пользовательский URL-адрес, и если он это так, вызовите любой метод OBJ-C, который вы хотите.

У меня похожая ситуация, но это Imageclick, href и обработка этого метода веб -просмотра,

- (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;
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top