2

私の iOS アプリでは、ユーザーの以前の操作に基づいて、いくつかのテキスト フィールドに注目する必要があります。viewDidFinshLoad次のように(メソッド内で)、JavaScriptを使用してフォーカスをうまく行うことができました

if (![focusElement isEqualToString:@""]) {
    // make the keyboard freely appear without user intervention
    [webView setKeyboardDisplayRequiresUserAction:NO];
    // first lose any previous focus and then focus on
    // the previously clicked element
    NSString *jsToFocus = [NSString stringWithFormat:
                           @"document.activeElement.blur();document.getElementById(\'%s\').focus();",
                           [focusElement UTF8String]];

    // javascript focuses on the input
    [webView stringByEvaluatingJavaScriptFromString:jsToFocus];

これはうまくいきます。唯一の問題は、ページがさらにフレーム/JavaScript をロードすると、キーボードがドロップダウンし、新しいロードごとに数回再表示されることです。私はこれが以前の原因で起こっていると思います

   [webView setKeyboardDisplayRequiresUserAction:NO];

これを行う(より良い)方法はありますか?さらに重要なのは、ユーザーがキーボードを閉じるまで、入力要素にフォーカスしたままキーボードを表示したままにすることです。

前もって感謝します。ニキル

4

1 に答える 1

0

私の問題の回避策として、それと呼ばれるプロパティを Web ビューに導入しました。

    @property BOOL isKeyBoardShown;

デフォルトでは NO に設定されており、キーボードが表示されない限り、さらにフレーム/要素をロードできます。ただし、目的の要素に焦点を合わせたら、すぐにそれを YES に設定し、それ以上の読み込みを強制的に停止します。要するに、私のviewShouldStartLoad...方法は次のようになります

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest: (NSURLRequest *)request
                                                 navigationType:  (UIWebViewNavigationType)navigationType {

    if (self.isKeyBoardShown)
         return NO;

 ... further code ...

次に、キーボード通知を導入しました

// set up keyboard notifications
[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(keyboardWillBeHidden:)
                                             name: UIKeyboardWillHideNotification
                                           object: nil];

そしてその方法

- (void) keyboardWillBeHidden : (NSNotification *) keyboardHideNotice {
        self.isKeyBoardShown = NO;
}

したがって、全体的なアイデアは、要素に焦点を当てる -> キーボードを表示する -> キーボードが起動している限り、それ以上の読み込みを停止する -> キーボードの終了時に読み込み権限をリセットする

これは正常に機能しますが、さらに問題があります。

ユーザーがテキストの入力を終了し、キーボードのsearchまたはgoキーを押した場合、キーボードがまだ起動しており、isKeyboardShownプロパティがであるためYES、ユーザーがレンズをタップしない限り (キーボードを閉じる)、webView は検索を続行しません。

検索キー押下イベントを検出する方法はありますか? UISearchBar入力は: (ではないことに注意してください。

于 2013-09-04T20:52:10.357 に答える