在childViewControllers之间切换时无法删除searchController

时间:2017-12-09 06:20:06

标签: ios swift uisearchcontroller

我有一个带有两个childViewControllers的容器viewController。两个childViewControllers都是tableViewControllers。我只希望其中一个子viewControllers能够使用searchController。

我在父containerViewController的viewDidLoad中定义并设置searchController:

let searchController = UISearchController(searchResultsController: nil)
searchController.delegate = self.childOneTableViewController
searchController.searchResultsUpdater = self.childOneTableViewController
searchController.dimsBackgroundDuringPresentation = false
self.navigationItem.searchController = searchController
self.definesPresentationContext = true

我正在使用分段控件在两个childViewControllers之间切换。

我想要做的是隐藏第二个childViewController的searchBar,但到目前为止我只能通过将searchController设置为nil来实现,这不是我想做的事情。

我已经阅读了许多帖子,强调了在进行segue时要做什么,但这是一个稍微不同的情况。

我认为显而易见的是:添加secondChildViewController时,searchController.isActive = false:

@IBAction func segmentedControlValueChanged(_ sender: UISegmentedControl) {
        if segmentedControl.selectedSegmentIndex == 0 {
            remove(asChildViewController: childOneTableViewController)
            add(asChildViewController: childTwoTableViewController)
            navigationItem.searchController!.isActive = true
        } else {
            remove(asChildViewController: childOneTableViewController)
            add(asChildViewController: childTwoTableViewController)
            navigationItem.searchController!.isActive = false
        }
    }

然而这没有任何效果,searchController在两个childViewControllers

中仍然可见

1 个答案:

答案 0 :(得分:2)

搜索栏将在两个子视图控制器上保持可见,因为您将其设置为父控制器的导航项。要隐藏第二个子控制器的搜索栏,您可以在else语句中执行以下操作:searchController.searchBar.hidden = true

激活搜索控制器不会显示或隐藏搜索栏,它会影响搜索结果视图控制器是否显示。更多关于here