从UITabBar按钮显示模态视图

时间:2016-10-20 16:15:59

标签: swift swift2 uitabbarcontroller uitabbar

我的UITabBar中有一个按钮需要显示一个模态(在Swift 2中)。我搜索并搜索并尝试了一些解决方案,但没有一个有效。我最近发现这个链接使它看起来很直接:https://www.hackingwithswift.com/example-code/uikit/how-do-you-show-a-modal-view-controller-when-a-uitabbarcontroller-tab-is-tapped并且我试图遵循它但无济于事。

我的初始视图控制器是class MainTabBarController: UITabBarController的主表栏控制器。在它的viewDidLoad()中,我添加了代码(我认为链接可能一直在使用旧版本的Swift,因此我不得不对链接中的内容进行一些语法更改):self.tabBarController?.delegate = UIApplication.sharedApplication().delegate as? UITabBarControllerDelegate

然后我将UITabBarControllerDelegate添加到我的AppDelegate.swift并在AppDelegate.swift中实现了以下内容,我也尝试将其放在MainTabBarController中,但它也无效:

我想指出“CreateNavControllerViewController”是我的“CreateViewController”的根视图控制器,这是我想要显示的。但是我将中间的tabbar按钮(默认的TabBarController到View链接)链接到CreateNav,然后CreateNav是Create的rootVC。在模态中,我想在顶部有一个导航栏,这就是我想要呈现CreateNav的原因。

func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
    print("inside shouldSelect VC")
    if viewController is CreateNavControllerViewController {
        print("    viewController is CreateNavControllerVC")
        if let newVC = tabBarController.storyboard?.instantiateViewControllerWithIdentifier("CreateNavController") {
            print("        if let newVC = ...")
            tabBarController.presentViewController(newVC, animated: true, completion: nil)
            return false
        }
    }
    print("skipped everything, returning true")
    return true
}

没有打印出来的打印报表。所以我很难过。任何人都可以提供一个解决方案,如何在UITabBar中获得一个按钮以在Swift 2中以模态方式呈现视图?

编辑:已更改(shouldSelect viewController :)到(shouldSelectViewController viewController :)但仍然没有。正常的标签栏视图改变而不是模态,不打印任何东西(函数不被调用)

Edit2:我想我弄明白了,设置VC我的标签栏最初显示为从UITabBarControllerDelegate继承,然后添加该功能并在viewDidLoad()中设置self.tabBarController?.delegate = self 。这似乎现在正在起作用

2 个答案:

答案 0 :(得分:1)

你应该改变

self.tabBarController?.delegate = UIApplication.sharedApplication().delegate as? UITabBarControllerDelegate

self.delegate = UIApplication.sharedApplication().delegate as? UITabBarControllerDelegate

UITabBarController

答案 1 :(得分:0)

您的控制器是否嵌套在导航控制器中?如果是这样,您应该检查导航控制器的第一个视图控制器是否是特定控制器。