HTML 側:
以下は、Objective-C メソッド (つまり、ネイティブ側) で呼び出したときに起動する JavaScript メソッドであると仮定します。
<script type="text/javascript">
var htmlTouch = 0;
//following is the function that you've assigned for a HTML button.
function button1_click()
{
htmlTouch =1; //The reason why i am setting the htmlTpuch=1,is just to identify whether it's native touch or HTML touch.
}
//javascrip function which we are going to call from oObjective-c
function toCallFromiOS()
{
if( htmlTouch == 1 )
{
alert("its a html touch,so pass any values to native code here.");
return 'urText';
}
}
//To reset the touch for next use.
function resetTheHTMLtouch()
{
htmlTouch = 0;
}
</script>
ネイティブ側:
上記の html をロードするために UIWebview を作成します (現在、ローカルで実行しています)。
self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:@"test" ofType:@"html"] isDirectory:NO]]];
ここで、ジェスチャー デリゲートを Web ビュー全体に追加します。
UITapGestureRecognizer *tapGestureDown = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture)];
tapGestureDown.numberOfTapsRequired = 1;
tapGestureDown.delegate = self;
[self.webView addGestureRecognizer:tapGestureDown];
//handleTapGesture はネイティブ メソッドです。「ネイティブ タッチかどうかを検出したら、何を実行しますか?」という意味です。
-(void)handleTapGesture
{
NSLog(@"Touch is native");
}
これですべての設定が完了しました。次のステップは、呼び出されたデリゲートを実装することです
-shouldRecognizeSimultaneouslyWithGestureRecognizer:==>which returns BOOL value.
webview でタッチ イベントを検出すると、実装されたデリゲート関数が呼び出されます。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
上記のコードをそのように追加すると、webview をタップすると、上記のデリゲートが N 回呼び出されます (8、9、13 など)。唯一の解決策は、タッチの状態を知ることができることです (終了または開始)、次の呼び出しのタッチ イベントをリセットします。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
NSString *javastr=[self.webView stringByEvaluatingJavaScriptFromString:@"toCallFromiOS();"];
NSLog(@"This is return string from javascript==>%@",javastr);
if((otherGestureRecognizer.state==UIGestureRecognizerStateEnded && [javastr hasPrefix:@"urText"]))
{
javastr= [self.webView stringByEvaluatingJavaScriptFromString:@"resetTheHTMLtouch();"];
return NO;
}
return YES;
}
が何らかの値 (テキスト) を返す場合javastr
、それは HTML タッチであるか、それ以外の場合はネイティブ タッチであり、"handleTapGesture" が呼び出されます。
詳細については、私のブログをご覧ください==> UIWebView で HTML タッチとネイティブ タッチの違いを感じてください
これがあなたの助けになることを願っています.幸せなコーディング...