2

キーイベントまたはテキストを Web ビューに送信する方法があるかどうか疑問に思っています。

ユーザーがボタンをクリックして特定のタスクを実行できるアプリがあります。ユーザーがクリックしたボタンに応じて、webview 内のテキスト ボックスに入力する必要があります。

ボタン クリック イベントなどを処理できますが、そのテキストを webview に渡すことができるかどうかを知りたいだけです。

Googleで検索しましたが、まだ解決策が見つかりません。多分私は何かを逃しています。

とにかく、事前に感謝します。

4

2 に答える 2

3

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 タッチとネイティブ タッチの違いを感じてください

これがあなたの助けになることを願っています.幸せなコーディング...

于 2013-09-11T04:04:35.503 に答える
0

だから私はそれがiOSであることを完全に忘れていました。私は単にjavascriptを使うことができます。将来誰かが同じ問題を抱えている場合に備えて。ここで解決策を見つけました

http://iphoneincubator.com/blog/windows-views/how-to-inject-javascript-functions-into-a-uiwebview

これにより、webview のテキスト ボックスやその他の場所にテキストを入力できます。

皆さんありがとう。

于 2013-09-11T02:18:47.770 に答える