当视图被推出时,UISearchController没有被解除。

12

我知道这篇文章有些长,但它只讨论一个问题。

背景信息

我的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推送,但仍然没有任何反应。我可以在推送之前完全取消编辑,但是我希望他们返回导航时仍然存在编辑状态。

我做错了什么?有更好的方法吗?


该链接视频为私人视频,我无法打开。 - Mehdi Ijadnazar
1个回答

39

我有完全相同的问题,我通过设置以下内容来解决它:

self.definesPresentationContext = YES;

在呈现UISearchController的视图控制器上设置它。这是苹果在WWDC会议228中推荐的,可以在这里阅读更多信息:http://asciiwwdc.com/2014/sessions/228


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