导航控制器自定义搜索栏不会消失?

时间:2017-04-28 03:14:48

标签: ios swift

我创建了一个自定义搜索栏并将其嵌入导航栏中,但是在我按下另一个视图控制器后,搜索栏不会被推送的视图控制器的标题替换。搜索栏在所有视图中保持不变,而不是替换为标题。完美的例子是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()
   }
}

2 个答案:

答案 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()
}