2010-11-08 1 views
3

Это кажется странным. Даже не уверен, что это возможно!Используйте кнопку на HTML-странице для вызова xcode IBAction

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

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

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

Спасибо, ребята,

Stefan.

ответ

8

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

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

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

(Docs here)

Идея заключается в том, что на этом коде, вы обнаруживаете протокол, основанный на данные в параметре 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; 
    } 
} 
+0

Можете ли вы показать мне, как это делается. Потому что я не могу это понять. Благодарю. – StefanHanotin

+0

Просто добавлен пример кода. Надеюсь, это сработает для вас. – pgb

+0

Ты мой друг ГЕРО! Бесконечно благодарен! – StefanHanotin

3
  1. Имейте кнопку на странице HTML, чтобы открыть настраиваемый URL-адрес, например myapp://buttonclick.

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

+0

Можете ли вы, возможно, показать мне где я ошибаюсь? Я пробовал выше, но он, похоже, не работает. Вот мой HTML. <входной тип = "кнопка" значение = "Смотреть видео" OnClick = "myProtocol: // callSomeAction" /> Вот мой Objective-C. - (BOOL) Webview: (UIWebView *) Webview shouldStartLoadWithRequest: (NSURLRequest *) запрос navigationType: (UIWebViewNavigationType) navigationType { \t, если (navigationType == UIWebViewNavigationTypeLinkClicked) { \t \t [собственной video1]; \t \t return NO; \t} \t \t возвращение ДА; } – StefanHanotin

0

У меня есть подобный вид ситуации, но сво 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; 
    } 
}