我知道这篇文章有些长,但它只讨论一个问题。
背景信息
我的UISearchController显示了一些非常奇怪的行为。让我描述一下层次结构,然后逐步解释一下视频中发生的事情:
你看到的第一个视图是一个普通的ViewController,其中包含一个tableView和完全独立的UISearchController。当我创建UISearchController时,它拥有自己的searchResultsController:
let searchResultsController = MyResultsControllerClass()
searchController = UISearchController(searchResultsController: searchResultsController)
这是基本的设置。
行为
MyResultsControllerClass
类有一个tableView,以及一个指针指向所有这些视图所在的主视图控制器。当搜索控制器的搜索栏开始搜索时,你会看到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推送(push),但什么也没发生。我尝试将UISearchController嵌入其自己的UINavigationController中,并从searchController.navigationController推送,但仍然没有任何反应。我可以在推送之前完全取消编辑,但是我希望他们返回导航时仍然存在编辑状态。
我做错了什么?有更好的方法吗?