Iphone 使用HTML页面上的按钮调用xcode iAction
这看起来很奇怪。甚至不确定这是否可能 我有一个加载本地html页面的UIWebView。在这个html页面上,我有一个按钮 我想单击按钮,然后在Xcode中调用iAction 我该怎么办?或者你能做到这一点 谢谢各位 斯特凡Iphone 使用HTML页面上的按钮调用xcode iAction,iphone,html,xcode,uiwebview,ibaction,Iphone,Html,Xcode,Uiwebview,Ibaction,这看起来很奇怪。甚至不确定这是否可能 我有一个加载本地html页面的UIWebView。在这个html页面上,我有一个按钮 我想单击按钮,然后在Xcode中调用iAction 我该怎么办?或者你能做到这一点 谢谢各位 斯特凡 让HTML页面上的按钮打开自定义url,如myapp://buttonclick 在web视图代理中,实现webView:shouldStartLoadWithRequest:navigationType:。检查请求是否包含自定义URL,如果包含自定义URL,则调用所需的任
myapp://buttonclick
webView:shouldStartLoadWithRequest:navigationType:
。检查请求是否包含自定义URL,如果包含自定义URL,则调用所需的任何Obj-C方法您可以通过使用自定义协议来实现。在html文件中,可以链接到类似
myP的内容rotocol://callSomeAction
然后在您的UIWebViewDelegate
(可能是您的UIViewController
)上,您必须实现名为:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
(文件)
其思想是,在该代码上,根据请求
参数中的数据检测协议。如果是myProtocol
,您可以调用iAction
并返回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;
}
}
我也有类似的情况,但这是一个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;
}
}
-(void)webView:(webView*)webView决策fornavigationAction:(NSDictionary*)操作信息请求:(NSURLRequest*)请求帧:(WebFrame*)帧决策侦听器:(id)侦听器{
NSString*host=[[request URL]host];
//如果(主机!=nil)
{
WebNavigationType eActionType=(WebNavigationType)[[actionInformation valueForKey:WebActionNavigationTypeKey]intValue];
NSURL*pOrignalURL;
如果(eActionType==WebNavigationTypeLinkClicked)/==[actionInformation valueForKey:WebActionNavigationTypeKey])
{
/*我们会处理的*/
pOrignalURL=[actionInformation valueForKey:WebActionOriginalURLKey];
NSString*pElementName=[actionInformation valueForKey:WebActionElementKey];
如果([[pOrignalURL absoluteString]hasPrefix:@“app:”){
[听者忽略];
返回;
}
}
//[[NSWorkspace sharedWorkspace]openURL:pOrignalURL];
NSArray*URL=[NSArray arrayWithObject:
[NSURL URLWithString:[pOrignalURL absoluteString]];
[[NSWorkspace sharedWorkspace]
OpenURL:URL
withAppBundleIdentifier:nil
/*使用默认系统绑定*/
选项:NSWorkspaceLaunchwithout未激活
additionalEventParamDescriptor:无
启动标识符:无];
/*默认行为*/
[收听者下载];
返回;
}
}
你能告诉我哪里出了问题吗?我试过上述方法,但似乎不起作用。这是我的HTML。这是我的目标-C.-(BOOL)webView:(UIWebView*)webView shouldwithrequest:(NSURLRequest*)request navigationType:(UIWebView navigationType)navigationType{if(navigationType==UIWebViewNavigationTypeLinkClicked){[self video1];返回NO;}返回YES;}你能告诉我这是怎么做的吗。因为我不太明白。谢谢你,我的朋友是个英雄!万分感谢!Thax感谢您的帮助,它有很多帮助:)如果任何人在使其工作时遇到问题,请检查您是否已将UIWebView
的委托设置为self
。我花了很长时间绕圈子,因为我忘了这么做。和@pgb感谢您的解决方案。@Isuru您的回答是正确的,您需要设置委托。但是,将其设置为self在您的上下文中起作用(self可能是视图控制器),但在其他上下文中可能会失败。我将其表述为:将web视图的委托设置为实现上述方法的类。