UISearchBar 失去焦点

Posted

技术标签:

【中文标题】UISearchBar 失去焦点【英文标题】:UISearchBar losing focus 【发布时间】:2014-09-25 18:53:22 【问题描述】:

我有一个用于 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];    

问题是,在我在搜索栏中输入一个字母后,搜索有效,但键盘立即关闭。我怎样才能防止这种情况发生?

【问题讨论】:

这里是这个问题的正确答案:***.com/a/25796944/4833705 【参考方案1】:

searchBar 失去焦点,因为它可能位于 tableView 标题中,并且正在重新加载 tableView。

您可以通过以下任一方式防止这种情况:

移动 searchBar,使其不再是 tableView 的子视图。选项包括将 searchBar 放置在导航栏或 tableView 上方的视图中。

reloadData 替换为以下方法之一以避免重新加载tableView 标头:

使用reloadSections:withRowAnimation: 重新加载表格的一部分,或者

使用 beginUpdates endUpdates 为要插入或删除的特定行的更改设置动画。

【讨论】:

【参考方案2】:

对我有用的是在 reloadData 之后进行 becomeFirstResponder 调用:

[self.tableView reloadData];
[self.searchBar becomeFirstResponder];

这适用于 ios 8.1.2,我还没有在其他版本上测试过。

【讨论】:

【参考方案3】:

我在上面遇到了同样的问题,但原因不同。我的UISearchBar 在表格顶部的一个单元格中。键入时,我会调用以重新加载 UITableView,这导致搜索栏失去焦点 - 因为包含搜索栏的单元格正在重新加载。

解决方案是只重新加载我需要的单元格。我的搜索栏在第 0 部分,所有搜索结果在第 1 部分。所以这样的调用确保只有第 1 部分被重新加载,并且搜索栏没有失去焦点。

NSIndexSet *section1 = [NSIndexSet indexSetWithIndex:1];
[self.tableView reloadSections:section1 withRowAnimation:UITableViewRowAnimationAutomatic];

【讨论】:

【参考方案4】:

searchBar:textDidChange: 被调用时,searchBar FirstResponder。无需向其发送becomeFirstResponder 消息。 此外,您确实将becomeFirstResponder 发送到self.searchBar,这可能与在searchBar:textDidChange: 方法调用期间传输给您的searchBar 不同。 我建议删除[self.searchBar becomeFirstResponder]; 并检查您的属性self.searchBar 是否真的链接到回调searchBar:textDidChange: 中的searchBar 对象。

【讨论】:

以上是关于UISearchBar 失去焦点的主要内容,如果未能解决你的问题,请参考以下文章

前端开发中失去焦点和获取焦点是啥意思

文本框 失去焦点 是啥意思?

js文本域执行onkeyup事件后会失去焦点,怎么解决失去焦点的问题?

jquery 怎么让输入框失去焦点

如何用JS实现div失去焦点事件

登陆窗口焦点失去问题。有遇到的麻烦给解决下,问题小,可有点小纠结。