如何在TabBarController的ViewController上使UIButton返回用户在Swift中最后选择的TabBarViewController(不是当前的)

时间:2017-03-08 02:37:23

标签: ios swift uibutton uitabbarcontroller uitabbar

我有一个5选项卡TabBarController,其中selectedIndex = 2(第3个TabBarItem)是一个嵌入在NavigationViewController中的全屏相机,其标签栏和导航栏分别通过self.tabBarController?.tabBar.isHidden = trueself.navigationController?.isNavigationBarHidden = true隐藏。

我在相机预览图层上显示了一个UIButton;目前,我正在实施self.tabBarController?.selectedIndex = 0以导航回第一个TabBarItem。

我需要什么:如何存储最后一个selectedIndex(在选择Camera选项卡之前),以便在初始化相机之前UIButton将用户返回到最后一个TabBarView?

请记住,相机由TabBarItem(selectedIndex = 2)呈现,因此它不会在顶部显示模态视图。

逻辑示例:

VC1> VC3(相机)>选择UIButton> VC1

VC2> VC5> VC3(相机)>选择UIButton> VC5

另外,我在我的TabBarController(使用UITabBarControllerDelegate子类)中实现了以下功能来记录selectedIndex。

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    print("The previous tab was index \(selectedIndex)") 
}   

2 个答案:

答案 0 :(得分:1)

最简单的解决方案是将UserDefaults中的索引保存在五个viewWillDisappear的{​​{1}}中,然后在点击按钮导航到该索引时将其检索

答案 1 :(得分:0)

(代表OP发布)

感谢我的建议,我能够使这个过程发挥作用。实施代码如下:

在TabBarController中

overrride fun tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    print("the previous tab was index \(selectedIndex)")
    UserDefaults.standard.set(selectedIndex, forKey: "previousTab")
    UserDefaults.standard.synchronize()
}

在CameraViewController上的UIButton中

@IBAction func exitCamera(_ sender: UIButton) {
    if let lastTab = UserDefaults.standard.string(forKey: "previousTab") {
        self.tabBarController?.selectedIndex = Int(lastTab)!
        DispatchQueue.main.async {
            self.stopCaptureSession()
        }
    }
}

到目前为止,它的作用就像一个魅力! : - )