UISearchBar失去焦点

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为特定的行动画改变插入或删除。


Rei*_*ner 0

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