使用HTML页面上的按钮调用Xcode IBACTION
题
这似乎是一个奇怪的人。甚至不确定是否可能!
我有一个加载本地HTML页面的UIWebView。在此HTML页面上,我有一个按钮。
我想单击按钮,然后在Xcode中调用IBACTION。
我该怎么做?还是你甚至可以这样做???
多谢你们,
斯特凡。
解决方案
您可以使用自定义协议来做到这一点。在您的html文件中,您可以链接到类似的内容 myProtocol://callSomeAction
.
然后在你的 UIWebViewDelegate
(可能是你的 UIViewController
)您必须实现称为:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
(文档 这里)
想法是,在该代码上,您可以根据数据检测协议 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;
}
}
其他提示
在HTML页面上打开按钮打开一个自定义URL,例如
myapp://buttonclick
.在您的Web视图委托中,实施
webView:shouldStartLoadWithRequest:navigationType:
. 。检查请求是否包括您的自定义URL,如果这样做,请调用您想要的任何OBJ-C方法。
我也有类似的情况,但是它是一个想象中的,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;
}
}
不隶属于 StackOverflow