これは奇妙なもののようです。それが可能かどうかさえわかりません!!
ローカルの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メソッドを呼び出します。
私も同じような状況ですが、そのimageclick、href、およびこのWebビューの方法の処理
- (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;
}
}