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

问题描述:

我在UITableView的标题中使用UISearchController的UISearchBar。我的搜索工作正常,当我在搜索栏的字段中输入一些文本时,所有相关的方法都会被调用,并且表视图按预期显示正确的搜索结果。当失去焦点时,UISearchController搜索栏文字消失

问题出现在我想要点击某个结果来完成某件事情时。只要点击其中一个表格视图单元格,搜索栏中的字段就会变为空白。由于搜索文本现在为空,因此搜索结果将更新,并且表视图会以零结果重新加载。所以表格单元上的水龙头什么也不做,因为表格单元不再存在。

我可以通过更新我的updateSearchResultsForSearchController:方法来解决大多数此问题,以便在搜索字符串为空时不更新搜索结果。这工作正常。但无论如何,我仍然希望搜索文本留在搜索字段中,这是我问题的症结所在......

为什么我的搜索文本从搜索字段中消失,以及如何防止当我点击其他地方时搜索字段变空了?

以下是我设置了搜索栏和搜索控制器:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

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

编辑:我注意到,虽然搜索栏具有焦点的表格视图单元为灰色。所以我认为搜索控制器正在捕获所有触摸,并可能将它们作为“取消”操作来处理。如果是这样,我该如何阻止它以这种方式取消?

+0

看看https://developer.apple.com/reference/uikit/uisearchcontroller/1618656-obscuresbackgroundduringpresenta >“如果你使用相同的视图控制器来显示搜索内容和搜索结果,建议您将此属性设置为false,此属性的默认值为true。“ –

+0

是的,你是对的 - 这已经解决了我的问题。我几乎在你发布的同一时间发现了它。我感觉有点傻。无论如何,我已经将它作为答案发布,以防以后帮助其他人。 –

想通了。我需要添加:

searcher.obscuresBackgroundDuringPresentation = NO;