我创建了一个自定义搜索栏并将其嵌入导航栏中,但是在我按下另一个视图控制器后,搜索栏不会被推送的视图控制器的标题替换。搜索栏在所有视图中保持不变,而不是替换为标题。完美的例子是Instagram搜索选项卡,您搜索一个人并单击单元格,他们的个人资料被推送,搜索栏被替换为自定义标题,后退按钮等。
First VC
self.customSearchBar.tag = 4
self.navigationController?.view.addSubview(customSearchBar)
第二个VC
if let nav: UINavigationController = self.navigationController {
if let searchBar = nav.view.viewWithTag(4) {
searchBar.removeFromSuperview()
}
}
答案 0 :(得分:2)
您不应将搜索栏放在navigationcontroller视图中,因为此视图与所有推送的viewcontrollers上的视图相同。
将搜索栏添加到依赖视图控制器ui。
答案 1 :(得分:1)
要在navigationBar上添加搜索栏,就可以了。
self.navigationController?.navigationBar.addSubview(customSearchBar)
将其推送到其他viewController时将其删除。将以下代码写入第二个VC中,该第二个VC被推入其viewDidLoad()
函数中。另外,将customSearchBar
的代码设置为任意数字(TAG
)
if let nav: UINavigationController = self.navigationController {
let bar: UINavigationBar = nav.navigationBar
if let searchBar = bar.viewWithTag(TAG) {
searchBar.removeFromSuperview()
}
}
在问题中,customSearchBar
已添加到self.navigationController.view
。要删除它,您可以执行以下操作:
if let nav: UINavigationController = self.navigationController {
if let searchBar = nav.view.viewWithTag(TAG) {
searchBar.removeFromSuperview()
}
}
修改强>
添加和删除UIViewController的视图作为其他UIViewController的子视图
// for adding
let viewController: ViewController = ViewController()
self.addChildViewController(viewController)
self.view.addSubview(viewController.view)
viewController.view.bounds = self.view.bounds // better to use autolayout here
viewController.didMove(toParentViewController: self)
// for removing
if let vc = self.childViewControllers.last {
vc.willMove(toParentViewController: nil)
vc.view.removeFromSuperview()
vc.removeFromParentViewController()
}