UISearchController 搜索栏文本在失去焦点时消失
UISearchController search bar text disappears when losing focus
我在 UITableView 的 header 中使用 UISearchController 的 UISearchBar。我的搜索工作正常,因为当我在搜索栏的字段中输入一些文本时,将调用所有相关方法并且 table 视图按预期显示正确的搜索结果。
当我想点击其中一个结果来处理它时,问题就来了。只要我点击其中一个 table 视图单元格,搜索栏中的字段就会变为空。由于搜索文本现在为空,因此更新了搜索结果并且 table 视图重新加载了零个结果。所以点击 table 单元格没有任何作用,因为 table 单元格不再存在。
我可以解决大部分问题,方法是更新我的 updateSearchResultsForSearchController:
方法,以便在搜索字符串为空时不更新搜索结果。这很好用。但无论如何,我仍然希望搜索文本保留在搜索字段中,这就是我问题的关键...
为什么我的搜索文本从搜索字段中消失了,当我点击其他地方时如何防止搜索字段变空?
以下是我设置搜索栏和搜索控制器的方法:
- (void)viewDidLoad {
[super viewDidLoad];
searcher = [[UISearchController alloc] initWithSearchResultsController:nil];
searcher.searchResultsUpdater = self;
searcher.delegate = self;
searcher.definesPresentationContext = YES;
resultsTable.tableHeaderView = searcher.searchBar;
编辑:我注意到 table 视图单元格在搜索栏有焦点时变暗。所以我认为搜索控制器正在捕获所有触摸并且可能将它们处理为 'cancel' 操作。如果是这样,我该如何阻止它以这种方式取消?
想通了。我需要添加:
searcher.obscuresBackgroundDuringPresentation = NO;
我在 UITableView 的 header 中使用 UISearchController 的 UISearchBar。我的搜索工作正常,因为当我在搜索栏的字段中输入一些文本时,将调用所有相关方法并且 table 视图按预期显示正确的搜索结果。
当我想点击其中一个结果来处理它时,问题就来了。只要我点击其中一个 table 视图单元格,搜索栏中的字段就会变为空。由于搜索文本现在为空,因此更新了搜索结果并且 table 视图重新加载了零个结果。所以点击 table 单元格没有任何作用,因为 table 单元格不再存在。
我可以解决大部分问题,方法是更新我的 updateSearchResultsForSearchController:
方法,以便在搜索字符串为空时不更新搜索结果。这很好用。但无论如何,我仍然希望搜索文本保留在搜索字段中,这就是我问题的关键...
为什么我的搜索文本从搜索字段中消失了,当我点击其他地方时如何防止搜索字段变空?
以下是我设置搜索栏和搜索控制器的方法:
- (void)viewDidLoad {
[super viewDidLoad];
searcher = [[UISearchController alloc] initWithSearchResultsController:nil];
searcher.searchResultsUpdater = self;
searcher.delegate = self;
searcher.definesPresentationContext = YES;
resultsTable.tableHeaderView = searcher.searchBar;
编辑:我注意到 table 视图单元格在搜索栏有焦点时变暗。所以我认为搜索控制器正在捕获所有触摸并且可能将它们处理为 'cancel' 操作。如果是这样,我该如何阻止它以这种方式取消?
想通了。我需要添加:
searcher.obscuresBackgroundDuringPresentation = NO;