use*_*716 3 uitableview uisearchbar first-responder ios
我有一个UITableView的UISearchBar,实现如下:
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
[self.searchBar becomeFirstResponder];
if(searchText.length == 0)
{
self.isFiltered = NO;
}
else
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.writer1 contains[c] %@", searchText];
self.isFiltered = YES;
[[RTRepairOrderStore sharedStore] filterROArray:predicate];
}
[self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我在搜索栏中输入一个字母后,搜索就可以了,但是键盘立即被关闭了。我该如何预防?
小智 5
searchBar正在失去焦点,因为它可能位于tableView标头中,并且tableView正在重新加载。
您可以通过以下两种方法之一来防止这种情况:
移动searchBar,使其不再是tableView的子视图。选项包括将searchBar放置在导航栏中或tableView上方的视图中。
替换reloadData为以下方法之一,以避免重新加载tableView标头:
使用reloadSections:withRowAnimation:重新加载表的一部分,或
使用beginUpdates endUpdates为特定的行动画改变插入或删除。
当被调用时searchBar:textDidChange:,searchBar 是. FirstResponder无需向其发送becomeFirstResponder消息。
此外,您确实发送becomeFirstResponder到,这可能与方法调用期间传输给您的self.searchBar不同。
我建议删除并检查您的属性是否确实链接到回调中的对象。searchBarsearchBar:textDidChange:[self.searchBar becomeFirstResponder];self.searchBarsearchBarsearchBar:textDidChange:
| 归档时间: |
|
| 查看次数: |
1918 次 |
| 最近记录: |