【发布时间】:2010-11-08 12:44:30
【问题描述】:
这看起来很奇怪。不知道有没有可能!!
我有一个加载本地 html 页面的 UIWebView。在这个 html 页面上,我有一个按钮。
我想点击按钮,然后在 Xcode 中调用 IBAction。
我该怎么做呢?或者你甚至可以这样做吗???
谢谢大家,
斯特凡。
【问题讨论】:
标签: iphone html xcode uiwebview ibaction
这看起来很奇怪。不知道有没有可能!!
我有一个加载本地 html 页面的 UIWebView。在这个 html 页面上,我有一个按钮。
我想点击按钮,然后在 Xcode 中调用 IBAction。
我该怎么做呢?或者你甚至可以这样做吗???
谢谢大家,
斯特凡。
【问题讨论】:
标签: iphone html xcode uiwebview ibaction
您可以使用自定义协议来做到这一点。在您的 html 文件中,您可以链接到 myProtocol://callSomeAction 之类的内容。
然后在您的UIWebViewDelegate(可能是您的UIViewController)上,您必须实现调用的方法:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
(文档here)
想法是,在该代码上,您可以根据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;
}
}
【讨论】:
UIWebView 的委托设置为 self。我花了很长时间在灌木丛中拐弯抹角,因为我忘了这样做。还有@pgb 感谢您的解决方案。
让 HTML 页面上的按钮打开一个自定义 URL,例如 myapp://buttonclick。
在您的 Web 视图委托中,实现 webView:shouldStartLoadWithRequest:navigationType:。检查请求是否包含您的自定义 URL,如果包含,请调用您想要的任何 Obj-C 方法。
【讨论】:
我也有类似的情况,不过是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;
}
}
【讨论】: