0

単体テストでは、UITextField で becomeFirstResponder メソッドを呼び出そうとしていますが、NO を取得しています。つまり、最初のレスポンダーにはなりません。

コードは次のようになります。

UITextField *textField = [self.controller.searchBar valueForKey: @"_searchField"];
//    textField = [[UITextField alloc] initWithFrame:CGRectMake(10.0, 10.0, 400.0, 44.0)];
[self.navigationController.navigationBar addSubview:textField];

textField.enabled = YES;
STAssertTrue([textField becomeFirstResponder],
             @"TextField should be a first responder.");

ここで何か不足していますか?

4

1 に答える 1

-1

テキストフィールドの検索バーの値を取得しています:

UITextField *textField = [self.controller.searchBar valueForKey: @"_searchField"];

ただし、その値を無視して、次のように上書きします。

textField = [[UITextField alloc] initWithFrame:CGRectMake(10.0, 10.0, 400.0, 44.0)];

この新しい textField はどのビューにも追加されておらず、割り当てられた唯一のテキストフィールドであり、それ以上のものではありません。アプリの一部ではないため、最初の応答者になることはできません。

検索バーにアクセスするためのより良い方法があります。

検索項目の位置は、searchTextPositionAdjustment や searchFieldBackgroundPositionAdjustment などの呼び出しで変更できます。また、 UISearchBarDelegateを使用して、入力されているテキストに関する情報を取得できます。

参照を得たからといって、どのようにファーストレスポンダーになるのでしょうか? おそらく、isFirstResponder (すでにファーストレスポンダーです) または canBecomeFirstResponder (ファーストレスポンダーになることができます) を使用するつもりでした。

それ以外の場合は、UITextFieldTextDidBeginEditingNotification に NSNotification を設定して、編集の開始時に通知を受け取る必要があります。

于 2013-10-22T01:24:02.670 に答える