我遇到与Using becomeFirstResponder causes cancel button to not work相同的问题,除了解决方案在我的情况下不起作用。
我创建了一个故事板项目,其中包含一个导航控制器和一个表视图控制器。我在表视图中添加了一个UISearchDisplayController,一切正常,直到我尝试访问searchDisplayController,如下面的代码片段所示。我正在使用节索引并将UITableViewIndexSearch(或@“{search}”)添加到节标题的顶部,以便放大镜显示在A-Z索引的开头。当我单击部分索引时,将调用以下函数:
- (NSInteger) tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
if ([title isEqualToString:UITableViewIndexSearch])
{
[self.searchDisplayController setActive:TRUE animated:TRUE]; // Either of these two lines
[self.searchDisplayController.searchBar becomeFirstResponder]; // will cause the search bar cancel button to not work
return 0;
}
return index - 1;
}
如果我注释掉两个访问searchDisplayController的行,则搜索栏取消按钮按预期工作。如果代码中的两行中的任何一行不,则搜索栏上的取消按钮就像是在那里一样。删除becomeFirstResponder
行意味着我必须在搜索栏字段中单击/触摸才能将焦点转移到它,因此在这种情况下,当我单击取消按钮时,搜索栏会获得焦点。这就好像通过搜索栏透明地看到取消按钮但无法点击/触摸。取出这两行代码,取消按钮再次工作。
到底发生了什么事?