如何从情节提要以编程方式实例化UITabBarController?

时间:2019-03-29 16:22:39

标签: swift

我有一个故事板,其中包括一个TabBarController场景。我正在尝试以编程方式实例化它,然后将其设置为rootViewController。

我在设置情节提要变量后放置了一个断点,可以确认是否找到了它。问题是正在为TabBarController加载场景。

我尝试创建一个自定义TabBarController子类,并将其设置为身份检查器中的“类”名称,我得到了同样的东西。

我也尝试过在同一情节提要中实例化UIViewControllers,它们可以很好地打开。 TabBarController就是这种情况。也许这是一个限制,无法做到。

@IBAction func loginButtonTapped(_ sender: UIButton) {
        let storyboard = UIStoryboard(name: StoryboardConstants.Composition, bundle: nil)
        if let vc = storyboard.instantiateViewController(withIdentifier: "Tabbar") as? UITabBarController {
            UIApplication.shared.keyWindow?.rootViewController = vc
        }
    }

这是我得到的错误: *由于未捕获的异常“ NSInternalInconsistencyException”而终止应用程序,原因:“无法为标识符“ Tabbar”加载场景视图控制器” * 首先抛出调用堆栈:

3 个答案:

答案 0 :(得分:0)

您没有为此视图控制器设置情节提要ID。

  1. 打开情节提要。
  2. 选择黄色的ViewController
  3. 点击身份检查器(在右侧组中第3次点击)
  4. 在“ Storyboard ID”字段中输入“ Tabbar”

答案 1 :(得分:0)

确保将标签栏添加到项目目标。另一种选择是清理项目,然后从身份检查器重建并检查,是否与情节提要板断开连接。

enter image description here

答案 2 :(得分:0)

Storyboard reference without name

终于让它起作用了!因此,我在身份检查器中正确设置了所有内容,问题是我没有将情节提要分配给链接到TabBarController的情节提要引用。

该错误没有给我任何提示,但是希望这会对某人有所帮助。