如何使 TabBarController return 用户的 ViewController 上的 UIButton 成为 Swift 中最后选择的 TabBarViewController(不是当前的)
How to make UIButton on ViewController of TabBarController return user to last selected TabBarViewController (not current one) in Swift
我有一个 5 选项卡 TabBarController,其中 selectedIndex = 2(第 3 个 TabBarItem)是一个嵌入 NavigationViewController 的全屏摄像头,通过 self.tabBarController?.tabBar.isHidden = true
和 self.navigationController?.isNavigationBarHidden = true
隐藏了选项卡栏和导航栏分别。
我在相机预览层上显示了一个 UIButton;目前,我正在实施 self.tabBarController?.selectedIndex = 0
以导航回第一个 TabBarItem。
我需要什么:如何存储最后一个 selectedIndex(在选择相机选项卡之前),以便 UIButton returns 用户在初始化相机之前使用最后一个 TabBarView?
请记住,相机是由 TabBarItem (selectedIndex = 2) 呈现的,因此它不会在顶部呈现模态视图。
逻辑示例:
VC1 > VC3(相机)> Select UIButton > VC1
VC2 > VC5 > VC3(相机)> Select UIButton > VC5
顺便说一句,我在我的 TabBarController(子类化为 UITabBarControllerDelegate)中实现了以下函数来记录 selectedIndex。
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
print("The previous tab was index \(selectedIndex)")
}
最简单的解决方案是将该索引保存在五个 ViewControllers
中的 viewWillDisappear
中的 UserDefaults
中,并在您单击按钮导航到该索引时检索它
(代表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()
}
}
}
到目前为止,它就像一个魅力! :-)
我有一个 5 选项卡 TabBarController,其中 selectedIndex = 2(第 3 个 TabBarItem)是一个嵌入 NavigationViewController 的全屏摄像头,通过 self.tabBarController?.tabBar.isHidden = true
和 self.navigationController?.isNavigationBarHidden = true
隐藏了选项卡栏和导航栏分别。
我在相机预览层上显示了一个 UIButton;目前,我正在实施 self.tabBarController?.selectedIndex = 0
以导航回第一个 TabBarItem。
我需要什么:如何存储最后一个 selectedIndex(在选择相机选项卡之前),以便 UIButton returns 用户在初始化相机之前使用最后一个 TabBarView?
请记住,相机是由 TabBarItem (selectedIndex = 2) 呈现的,因此它不会在顶部呈现模态视图。
逻辑示例:
VC1 > VC3(相机)> Select UIButton > VC1
VC2 > VC5 > VC3(相机)> Select UIButton > VC5
顺便说一句,我在我的 TabBarController(子类化为 UITabBarControllerDelegate)中实现了以下函数来记录 selectedIndex。
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
print("The previous tab was index \(selectedIndex)")
}
最简单的解决方案是将该索引保存在五个 ViewControllers
中的 viewWillDisappear
中的 UserDefaults
中,并在您单击按钮导航到该索引时检索它
(代表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()
}
}
}
到目前为止,它就像一个魅力! :-)