当失去焦点时,UISearchController搜索栏文本消失

5
我正在使用UISearchController的UISearchBar作为UITableView头部的搜索栏。当我在搜索栏输入文本时,所有相关方法都会被调用,并且表格视图会显示正确的搜索结果,搜索功能可以正常工作。
但是当我想要点击其中一个结果并对其进行操作时出现问题。一旦我点击表格视图单元格中的某个内容,搜索栏中的字段就会变为空。由于搜索文本现在为空,因此搜索结果会更新,表格视图会重新加载零个结果。因此,因为表格单元格已不存在,所以对表格单元格的点击不起作用。
为了解决这个问题,我更新了我的updateSearchResultsForSearchController:方法,以便在搜索字符串为空时不更新搜索结果。这种方法运行良好。但无论如何,我仍希望搜索文本保留在搜索字段中,这才是我的问题关键...
为什么我的搜索文本会从搜索栏中消失?我怎样才能防止在其他位置点击后搜索栏变为空?
以下是我设置搜索栏和搜索控制器的代码:
- (void)viewDidLoad {
    [super viewDidLoad];

    searcher = [[UISearchController alloc] initWithSearchResultsController:nil];
    searcher.searchResultsUpdater = self;
    searcher.delegate = self;
    searcher.definesPresentationContext = YES;
    resultsTable.tableHeaderView = searcher.searchBar;

编辑:我注意到当搜索栏获得焦点时,表视图单元格会变暗。因此,我认为搜索控制器正在捕获所有触摸事件,并可能将它们处理为“取消”操作。如果是这样,该怎么停止它以这种方式进行取消操作?


1
请查看https://developer.apple.com/reference/uikit/uisearchcontroller/1618656-obscuresbackgroundduringpresenta如果您使用相同的视图控制器来显示可搜索内容和搜索结果,则建议将此属性设置为false。该属性的默认值为true。 - Mike Sand
是的,你说得对 - 那解决了我的问题。我大约在你发布帖子的同时自己找到了答案。我有点儿傻。无论如何,我现在已经把它发布为答案,以防以后能够帮助其他人。 - Son of a Beach
1个回答

15

搞定了。我需要添加:

searcher.obscuresBackgroundDuringPresentation = NO;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接