Swift 3+:带有TabBarController的多个Storyboard。将TabBarController标签设置为所需的ViewController

时间:2018-07-06 16:43:16

标签: swift delegates storyboard viewcontroller tabbarcontroller

在多个情节提要中工作。从点A-> TabBarController(选项卡2)-> NavigationControllerA-> StoryboardReference-> NavigationControllerB-> ViewControllerA-> ViewControllerB中获取。无需数据传递。

我的标签栏控制器设置在其自己的情节提要中,每个选项卡都通过导航控制器到达情节提要参考。然后,情节提要参考链接到另一个情节提要(观察),并通过导航控制器链接到ViewControllerA。然后,我想去执行对ViewControllerB的Segue。这些都是通过UIViewController扩展来完成的。 从我一直在阅读的书中,我应该这样:

    let tab = 2
    let sbOne = UIStoryboard(name: "Main", bundle: nil)
    let tabBarController = sbOne.instantiateViewController(withIdentifier: "TabBarController") as! UITabBarController
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.window?.rootViewController = tabBarController
    tabBarController.selectedIndex = tab

    let sbTwo = UIStoryboard(name: "sbTwo", bundle: nil)
    let viewControllerA = sbTwo.instantiateViewController(withIdentifier: "ViewControllerA")
    performSegue(withIdentifier: "toViewControllerB", sender: self)

我收到NSInvalidArgument:点A“没有标识符为'toViewControllerB'的segue”

1 个答案:

答案 0 :(得分:0)

迅速3+ 如果这是最好的答案,但是这是唯一有效的解决方案,我会感到惊讶。我的问题有点源于缺乏了解。但是我想到的概念是将功能分为两部分。设置tabbarcontroller选项卡,然后使用变量struct定位到目标。 我最终在A点设置了一个结构。

IDTokenCredentials

然后按下按钮,我将以此设置变量,然后调用以下函数:

struct Destination {
    static var currentID = Int()
}

然后使用之前我可以将选项卡控制器设置为根视图控制器,然后转到所选选项卡上的ViewControllerA(第一个视图控制器)的部分代码。这是在uiviewcontroller扩展中完成的,但也可以在Point A的函数中完成。

Destination.currentID = currentID
goToViewControllerA()

然后只需检查是否设置了struct static var,然后选择到目标控制器(ViewControllerB)。这是在ViewControllerA中完成的,或者如果您必须通过多个视图控制器进行筛选,则可以在viewdidload中使用此模型在每个viewcontroller上建模功能。

goToViewControllerA(){
let tab = 2
let sbOne = UIStoryboard(name: "Main", bundle: nil)
let tabBarController = sbOne.instantiateViewController(withIdentifier: "TabBarController") as! UITabBarController
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = tabBarController
tabBarController.selectedIndex = tab
}

如果存在的话,我想学习一种更好的方法。