如何用UITabBarController打开一个模态并在关闭时显示最后一个标签栏视图?

kev*_*eon 16 cocoa-touch uitabbarcontroller ios uistoryboard swift

所以我有一个UITabBarController有三个按钮的故事板.其中两个通过标准视图关联segues打开与标签栏相关联的标准视图......第三个项目是问题.

我想在模态视图中打开一个存在于另一个故事板(由应用程序中的其他视图共享)的表单,并在关闭或提交时,返回到之前在选项卡式视图中处于活动状态的任何选项卡.

我已经看到了一些"选项",但它们似乎都不像我想做的那样.

有任何想法吗?

编辑:它是由我的原始问题编辑的mod,但我在Swift中写这个...不是Obj-C.

kev*_*eon 16

所以我有一个潜在的解决方案,使用空白视图控制器,shouldSelectViewController和UITabBarController委托.唯一的问题是,我对它的脆弱程度并不特别满意.

func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {

    // This is a bit dangerous if we move where 'newController' is located in the tabs, this will break.
    let newController = viewControllers![1] as! UIViewController

    // Check if the view about to load is the second tab and if it is, load the modal form instead.
    if viewController == newController {
        let storyboard = UIStoryboard(name: "ModalController", bundle: nil)
        let vc = storyboard.instantiateInitialViewController() as? UIViewController

        presentViewController(vc!, animated: true, completion: nil)

        return false
    } else {
        return true
    }
}
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但是如果有人出现并重新排列故事板中选项卡的顺序,这将会破坏.

另外,为了给@rmp一些功劳,另外一个选项是"如果你为tabBarController中的所有根视图控制器提供一个标题,你可以使用viewController.title来检查在shouldSelectViewController委托中点击了哪个标签.当然,您仍然冒着有人重命名视图标题属性的风险."