我知道这是一篇很长的文章,但这只是我承诺的一个问题。
我在使用UISearchController时遇到了一些非常奇怪的行为。让我描述一下层次结构,然后我将逐步解释我视频中发生的事情:
您看到的第一个视图是常规ViewController,其中tableView和UISearchController是完全独立的实体。 UISearchController有自己的searchResultsController,我在创建它时设置它:
let searchResultsController = MyResultsControllerClass()
searchController = UISearchController(searchResultsController: searchResultsController)
这是基本设置。
A link to a video of the behavior
MyResultsControllerClass
有一个tableView,以及一个指向主视图控制器的指针,所有这些视图都放在其中。当searchController的searchBar开始搜索时,你会看到tableView显示出来。然后我点击一个结果,编程俱乐部。 MyResultsControllerClass
使用指向主视图的指针来推送新的视图控制器(只是关于该事件的详细信息),如下所示:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let activityDetail = ActivityDetailViewController(nibName: nil, bundle: nil, activity: searchResults[indexPath.row])
parentController?.navigationController?.pushViewController(activityDetail, animated: true)
}
你可以看到这发生在searchBar后面,但是searchController没有被所呈现的视图“掩盖”!这是我的问题。如您所见,我仍然可以与之互动。当我按“取消”时,它最终消失。
现在,我认为这可能与UISearchController实际上是UIViewController的事实有关,如果我理解正确的话。所以我试图从UISearchController推送,没有任何反应。我尝试将UISearchController嵌入到自己的UINavigationController中并从searchController.navigationController推送,没有任何反应。我可以在推送之前完全取消编辑,但我希望编辑在导航时仍然存在。
我做错了什么?有更好的方法吗?
答案 0 :(得分:37)
我有同样的问题,我通过设置解决了这个问题:
self.definesPresentationContext = YES;
提供UISearchController的视图控制器上的。这是Apple在WWDC会议228中推荐的,请在此处阅读:http://asciiwwdc.com/2014/sessions/228。