是否可以从标签栏控制器导航到另一个标签栏控制器?

Posted

技术标签:

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

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

当前故事板

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

【问题讨论】:

你可以这样做 如何将数据传入第二个标签控制器? 【参考方案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)
        

    

【讨论】:

以上是关于是否可以从标签栏控制器导航到另一个标签栏控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何从标签栏视图控制器切换到另一个作为导航控制器子视图的视图

在导航到另一个视图控制器之前切换标签栏

在标签栏中的同一标签上切换视图而不使用导航控制器

以编程方式导航到另一个故事板上的导航控制器和标签栏控制器内的视图控制器

如何导航到嵌入在标签栏控制器中的视图控制器

如何从标签栏控制器执行 show segue?