【发布时间】:2018-03-29 08:35:23
【问题描述】:
我有一个UICollectionViewController,我在其中显示工作正常的任务列表,最近我尝试为我的TaskController 实现一个UISearchBar,在实现之后,当我尝试启动任何新的viewcontroller 时单击我的TaskController 中的行,新启动的视图控制器没有UINavigationBar,所以我不能再次回到我的任务列表。请参阅以下TaskController 和任务列表:
Image
在上面的屏幕截图中有一个星形图标,当用户点击它时,我启动了下面的视图控制器,它有一个导航栏(注意: 我没有过滤记录直接点击,这就是为什么我可以在这里看到导航栏。)。 UIViewController 与 UINavigationBar
Image
这是我在使用搜索栏过滤数据后单击星形图标时得到的。 navigation bar gone missing here 所以当我从下面更改一个选项卡并返回视图控制器被破坏并且我得到一个带有选项卡栏的黑屏时,我也无法返回任务列表控制器。
以下我用来实现搜索栏的代码有问题,请帮我解决。
let taskSearchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
//set taskSearchController
taskSearchController.searchResultsUpdater = self
taskSearchController.dimsBackgroundDuringPresentation = false
navigationItem.searchController = taskSearchController
getTaskList(){
}
}
以下方法给出了来自任务列表的过滤数据
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()
}
【问题讨论】:
-
self.navigationController?.isNavigationBarHidden = true 你可以用它来显示导航
-
您正在使用导航栏作为搜索视图。完成搜索方法后,您可以使用上面的注释代码取消隐藏导航栏。
-
找到了我们需要在
viewdidLoadMethod解决方案中设置definesPresentationContext = true的解决方案,该解决方案可在here 获得,其中显示“将视图控制器上的definePresentationContext 设置为true,确保搜索如果用户在 UISearchController 处于活动状态时导航到另一个视图控制器,则 bar 不会保留在屏幕上。"
标签: swift uicollectionview uinavigationbar uisearchbar