如何在切换视图时使UISearchController处于非活动状态

时间:2015-04-26 20:58:59

标签: ios swift uitabbarcontroller uisearchbar uisearchcontroller

关于我们观点设定的一些背景知识:

NavigationController内,我们有一个UITabBarController(包含3个标签页),其中UIViewController的{​​{1}}为UISearchController

如果我们让UISearchController处于活动状态并切换到另一个视图,则会出现错误,当我们返回搜索视图时,整个屏幕都是黑色的。 但是,当UISearchController未激活且我们切换视图时,这不会发生。

我们尝试在视图之间进行隔离时将控制器设置为不活动;但是,当UISearchController处于活动状态时,不会调用任何segueing事件(viewWillDissapearviewWillAppear等不显示日志打印件)

查看其他主题,我们尝试设置self.definesPresentationContext = true 但这不起作用。

是否有其他人遇到此问题或知道如何解决此问题?

2 个答案:

答案 0 :(得分:2)

尝试将searchbarController设置为像这样

self.resultSeachController.active = false

在您移动下一个视图

之前

答案 1 :(得分:0)

我遇到了同样的问题并解决了如下问题:

我延长了UITabBarController并创建了自定义类TabBarController

class TabBarController: UITabBarController  {

在那个类中我实现了它的didSelectItem方法,在那个方法中我调用了一个关闭搜索控制器的视图控制器的方法

// UITabBarDelegate
override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
    let vc = viewControllers![selectedIndex] as! CommonViewController
    if vc.searchController.active {
        vc.searchBarCancelButtonClicked_NoReload()
    }
}

viewControllersUITabBarController中的一个数组,它保留所有属于UITabBarController的视图控制器,以及' selectedIndex'是显示的Tab(和视图控制器)的索引,因此可以访问searchController处于活动状态的viewController。

在我的应用程序中,所有视图控制器都是名为CommonViewController的根类的子类,其中我放置了所有视图控制器共有的所有变量和方法,例如所有搜索功能。因此,我只是检查搜索控制器是否处于活动状态,如果是,我调用一个使其处于非活动状态并进行其他相关清理的方法。