从 AppDelegate 加载标签栏控制器
Posted
技术标签:
【中文标题】从 AppDelegate 加载标签栏控制器【英文标题】:Load Tab Bar Controller from AppDelegate 【发布时间】:2018-02-10 19:56:21 【问题描述】:我一直在尝试自己解决这个问题,但无法解决。
我想从我的 AppDelegate 加载一个标签栏控制器(在 Google 成功登录到应用程序之后)。
我在这里阅读了如何从 AppDelegate 加载 ViewController
Perform Segue from App Delegate swift
示例中的代码:
// Access the storyboard and fetch an instance of the view controller
let storyboard = UIStoryboard(name: "Main", bundle: nil);
let viewController: MainViewController = storyboard.instantiateViewController(withIdentifier: "ViewController") as! MainViewController;
// Then push that view controller onto the navigation stack
let rootViewController = self.window!.rootViewController as! UINavigationController;
rootViewController.pushViewController(viewController, animated: true);
根据我的理解,在此示例中,我的 TabBar 需要名称和标识符。
有人可以向我解释一下吗?我在 Tab Bar Controller 上找不到“标识符”,只有“标题”。
另外,我的应用中没有导航控制器视图。
【问题讨论】:
【参考方案1】:在此处设置情节提要 ID
并在navigationController中嵌入IB中的firstViewController
let rootViewController = self.window!.rootViewController as! UINavigationController;
rootViewController.pushViewController(viewController, animated: true);
【讨论】:
感谢您的快速回复。所以这是 Storyboard ID 是标识符。名字呢?关于更改 root - 这与示例中的有何不同? 我刚刚看到你编辑了帖子。我现在已经设置了 StoryboardID。它是“MainTabBar”。在 IB 中嵌入 firstViewController 是什么?在导航控制器?我没有navigationController,什么是IB? IB 是 Interface Builder ,选择视图控制器,箭头指向它的中间,从左到右,在 Editor 菜单中选择 Embed in navigation controller 当你说“firstViewController”时,你的意思是登录发生的视图控制器? 在 IB 中选择导航控制器,并在右侧作为 Storyboard ID ,取消选中显示导航栏,还要注意所有即将到来的礼物都将被推送和关闭将弹出【参考方案2】:ios 13 更新
来自版本。 iOS 13,
RootViewController 将在位于 scene
的函数中启动
SceneDelegate.swift
而不是 AppDelegate.swift
文件。看起来像这样。
示例:
// Simple init
let mainSB: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let loggedInTabController = mainSB.instantiateViewController(identifier: "loggedInTabController")
self.window!.rootViewController = loggedInTabController
【讨论】:
以上是关于从 AppDelegate 加载标签栏控制器的主要内容,如果未能解决你的问题,请参考以下文章
我需要在 appdelegate swift 中添加一个自定义标签栏控制器