重复使用的ViewController中的搜索栏在segue

时间:2016-04-14 08:18:54

标签: swift ios9 uisearchcontroller searchbar

我在视图控制器中配置搜索控制器:

searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.placeholder = getLocalizedString("searchByName")
searchController.searchBar.setValue(getLocalizedString("cancel"), forKey:"_cancelButtonText")
searchController.searchBar.delegate = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.searchBar.showsCancelButton = true
searchController.searchBar.sizeToFit()

然后,当点击导航栏中的搜索按钮时,我会在导航栏的titleView中显示搜索栏:

self.navigationItem.setHidesBackButton(true, animated: true)
self.navigationItem.rightBarButtonItem = nil
self.navigationItem.leftBarButtonItem = nil

self.navigationItem.titleView = searchController.searchBar

searchController.searchBar.becomeFirstResponder()

当我将此视图控制器用作标签栏项时,搜索栏按预期工作。

我还将视图控制器与来自另一个视图控制器的segue一起使用,该控制器也有一个搜索控制器。

执行segue后,我点击搜索按钮,会显示搜索栏,但没有响应点击或任何内容。

更新

我刚想通了,因为我正在使用:

self.definesPresentationContext = true

知道为什么吗?我需要它,因为如果不是屏幕被遮挡,如果我在标签之间移动。

感谢。

1 个答案:

答案 0 :(得分:2)

对于寻找答案的人,我可以通过definesPresentationContext方法将prepareForSegue设置为false来解决问题。

另外,为了避免用户向后移动时出现黑屏,我还在viewWillAppear中将其设置为true。