我有一个UICollectionViewController
我正在显示工作正常的任务列表,最近我尝试在实施后UISearchBar
实施TaskController
,当我尝试启动时任何新的viewcontroller
通过点击我TaskController
内的行,新启动的视图控制器没有UINavigationBar
所以我无法再次移回我的任务列表。请参阅以下TaskController
任务列表:
Image
在上面的屏幕截图中有一个星形图标,当用户点击它时,我启动了一个带有导航栏的视图控制器(注意: 我直接点击而没有过滤记录这就是为什么我可以在这里看到导航栏。)。 UIViewController
UINavigationBar
let taskSearchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
//set taskSearchController
taskSearchController.searchResultsUpdater = self
taskSearchController.dimsBackgroundDuringPresentation = false
navigationItem.searchController = taskSearchController
getTaskList(){
}
}
Image
这是我用搜索栏过滤数据后点击星形图标时得到的结果。 navigation bar gone missing here 所以我不能回到任务列表控制器当我从下面更改一个标签并返回视图控制器被破坏,我得到一个带标签栏的黑屏。
以下代码我习惯实现有问题的搜索栏,请帮我解决。
func updateSearchResults(for searchController: UISearchController) {
guard let searchText = searchController.searchBar.text, !searchText.isEmpty else{
self.taskList = self.originalTaskist
collectionView?.reloadData()
return
}
taskList = originalTaskist.filter({ task -> Bool in
return task.name!.lowercased().contains(searchText.lowercased())
})
collectionView?.reloadData()
}
以下方法提供来自任务列表的过滤数据
test.test
答案 0 :(得分:1)
override func viewDidLoad() {
super.viewDidLoad()
// This prevents the search bar to make trouble on pushed view controllers
definesPresentationContext = true
//...
}
将definesPresentationContext = true
放在显示搜索栏的View Controller内部(在您的情况下为UICollectionViewController
。
不幸的是,documentation不能很好地解释为什么这样做有效。 This blog post解释得更好。