Сделайте UITextField первым респондентом

В модульном тесте я пытаюсь вызвать метод comeFirstResponder для UITextField, но я получаю НЕТ, т.е. он не становится первым респондентом.

Код выглядит так:

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.");

Я что-то здесь упускаю?

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 (он может стать первым респондентом).

В противном случае вам нужно установить NSNotification для UITextFieldTextDidBeginEditingNotification, чтобы получать уведомления, когда он начинает редактирование.

Другие вопросы по тегам