我的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
。这似乎现在正在起作用
答案 0 :(得分:1)
你应该改变
self.tabBarController?.delegate = UIApplication.sharedApplication().delegate as? UITabBarControllerDelegate
带
self.delegate = UIApplication.sharedApplication().delegate as? UITabBarControllerDelegate
在UITabBarController
答案 1 :(得分:0)
您的控制器是否嵌套在导航控制器中?如果是这样,您应该检查导航控制器的第一个视图控制器是否是特定控制器。