【问题标题】:Is it possible to navigate from a tab bar controller to another tab bar controller?是否可以从标签栏控制器导航到另一个标签栏控制器?
【发布时间】:2019-10-03 05:30:32
【问题描述】:

我有一个带有三个选项卡作为根导航的应用程序,第一个选项卡中有一个表格视图。因此,当用户单击表格单元格时,用户应该导航到另一个包含两个选项卡的视图。我如何做到这一点?

当前故事板

这是我目前所拥有的。我还在学习ios开发,想知道这是否可行

【问题讨论】:

  • 你可以这样做
  • 如何将数据传入第二个标签控制器?

标签: ios swift storyboard tabbar


【解决方案1】:

将情节提要从表格视图中移除到第二个标签栏控制器。并从表格视图控制器的didSelectRowAt 方法中显示第二个标签栏控制器。您可以像这样将数据传递给嵌入式视图控制器

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if let secondTabBarController = self.storyboard?.instantiateViewController(withIdentifier: "SecondTabBarController") as?  SecondTabBarController {
        if let navControllers = secondTabBarController.viewControllers as? [UINavigationController] {
            if let fourthVC = navControllers.first(where: { $0.topViewController is FourthVC })?.topViewController as? FourthVC {
                fourthVC.name = "name"
            }
            if let fifthVCvc = navControllers.first(where: { $0.topViewController is FifthVC })?.topViewController as? FifthVC {
                fifthVCvc.id = 20
            }
        }
        self.present(secondTabBarController, animated: true, completion: nil)
    }
}

用正确的类名和标识符替换类名和情节提要标识符

class FourthVC: UIViewController {
    var name: String?
    override func viewDidLoad() {
        super.viewDidLoad()
        print(name)
    }
}
class FifthVC: UIViewController {
    var id: Int?
    override func viewDidLoad() {
        super.viewDidLoad()
        print(id)
    }
}

【讨论】:

  • 顺便问一下如何在导航栏中获得返回按钮?
  • 因此,如果我使用 nav.pushViewController() 而不是 present() 我想我可以获得相同的行为,并将第二个标签控制器附加到第一个标签控制器的导航
  • @SenuraSeneviratne 是的,您可以使用。在使用 nav.pushViewController() 之前隐藏第一个选项卡控制器的导航栏,否则第二个选项卡控制器的导航栏将不可见
【解决方案2】:

是的,您通过此条件在单个选项卡控制器中设置了任何检查,您希望显示哪个选项卡从其重置。

【讨论】:

    【解决方案3】:

    当点击表格视图中的行时,您可以使用如下代码:

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            // Segue to the other UITabBarController, pass selected information
    
            let selectedCell = tableView.cellForRow(at: indexPath.row)
    
            if let viewController = self.storyboard?.instantiateViewController(withIdentifier: "YourTabBarControllerIdentifier") as? YourTabBarController {
                viewController.selectedIndex = 2 // or the index you want by default
                viewController.modalTransitionStyle = .crossDissolve // or transition you want
    
                self.present(viewController, animated: true, completion: nil)
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 2019-03-31
      相关资源
      最近更新 更多