在单元测试中,我试图在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.");
我在这里错过了什么吗?
您正在获取文本字段的搜索栏的值:
UITextField *textField = [self.controller.searchBar valueForKey: @"_searchField"];
但是,您只需忽略该值,并用以下内容覆盖它:
textField = [[UITextField alloc] initWithFrame:CGRectMake(10.0, 10.0, 400.0, 44.0)];
您尚未将此新文本字段添加到任何视图,它只是一个分配的单独文本字段,仅此而已。 它不能成为第一响应者,因为它不是应用程序的一部分。
有更好的方法来访问搜索栏。
您可以通过 searchTextPositionAdjust 和 searchFieldBackgroundPositionAdjust 等调用来更改搜索项的位置。 您可以使用UISearchBarDelegate来获取有关正在输入的文本的信息。
它将如何仅仅因为您引用它而成为第一响应者? 也许你打算使用isFirstResponder(它已经是第一响应者)或canBebe成为第一响应者(它可以成为第一响应者)。
否则,您需要在 UITextFieldTextDidBeginEditNotification 上设置 NSNotization,以便在它开始编辑时收到通知。