使UITextField成为第一响应者

时间:2013-10-22 00:35:45

标签: ios objective-c uitextfield becomefirstresponder

在单元测试中,我试图在UITextField上调用becomeFirstResponder方法,但是我没有,即它没有成为第一个响应者。

代码如下所示:

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 个答案:

答案 0 :(得分:-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,以便在开始编辑时收到通知。