Используйте кнопку на HTML -странице, чтобы вызвать Xcode Ibaction
Вопрос
Это кажется странным. Даже не уверен, возможно ли это !!
У меня есть 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;
}
}
Другие советы
Иметь кнопку на странице HTML Откройте пользовательский URL, такой как
myapp://buttonclick
.В вашем веб -представлении делегат, реализовать
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;
}
}