0

UIWebViewサーバーからドキュメントをロードしました。Web ドキュメントには、いくつかのテキスト入力フィールドがあります。ユーザーがタッチして選択したフィールドの ID または名前を特定するにはどうすればよいですか。次に、入力フィールドに入力する値を割り当てたいと思います。

私は JavaScript が必要であると信じるのに十分読んだことがありますが、それを Xcode の目的の c に関連付ける方法がわかりません。どんな助けでも大歓迎です。

ありがとうロン

4

1 に答える 1

0

これは、簡単な実装の簡単な例です。

example.html

<script type="text/javacript">
    function populateField(fieldId, fieldText) {
        $('#' + fieldId).val(fieldText);
    }

    var bridgeScheme = 'myapp';
    (function($) {
        $('#my-textfield').on('focus', function() {
            var data = {
                'action': 'focus',
                'field-id': $(this).attr('id')
            };
            var encodedData = encodeURIComponent(JSON.stringify(data));

            $('#iframe').attr('src', bridgeScheme + encodedData);
        });
    })(jQuery)
</script>

<form id="my-form">
    <div>
        <input type="text" id="my-textfield">
    </div>
</form>

<iframe src="" id="iframe"></iframe>

いくつかのこと:

  • iframe、 を通過するリクエストを生成するために使用され UIWebViewます。コントローラーに実装することでキャプチャできるようになります UIWebViewDelegate(後述)。
  • 変数は、リクエストが独自の JavaScript コードからのbridgeSchemeものであることを検出する方法です (後述)。
  • populateFieldjavascript 関数がネイティブ側から呼び出され、テキスト フィールドに必要な値が入力されます。

ExampleViewController.m

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
  // This needs to be the same value as used in the javascript
  NSString *bridgeScheme = @"myapp";

  // That's where we capture the request if the request's scheme matches
  if ([request.URL.scheme isEqualToString:bridgeScheme])
  {
    // Extract the part of the request url that contains the data we need
    NSString *dataString = [request.URL.absoluteString substringFromIndex:bridgeScheme.length + 1];
    // The data was URL encoded
    dataString = [dataString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    // Here we transform the JSON string into a JSON object (dictionary)
    NSData *data = [dataString dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

    // Extract the field id from the dictionary
    NSString *fieldId = dataDictionary[@"field-id"];

    // Call the javascript method on the webview
    NSString *populateFieldJS = [NSString stringWithFormat:@"populateField('%@', '%@')", fieldId, @"Whatever text you want to put in there"];
    [webView stringByEvaluatingJavaScriptFromString:populateFieldJS];

    return NO;
  }

  return YES;
}

それが役に立てば幸い!

于 2013-05-24T01:35:30.603 に答える