在 AppDelegate 中引用从 StoryBoard 创建的 TabbarController?
Referencing TabbarController created from StoryBoard in AppDelegate?
我有一个带有初始登录屏幕的标签栏应用程序。 tabbarController 被设置为 Storyboard 中的初始视图,其中 1 VC 还嵌入了 navigationController。
我有一个登录VC实例化并在我的 AppDelegate 中设置为 rootViewController。用户从 loginVC 成功登录后,我需要切换到 tabbarController。我会尝试获取对 tabbarcontroller 的引用并将其设置为新的 rootviewcontroller 吗?如果是这样,我很难弄清楚如何做到这一点:/
AppDelegate
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if NSUserDefaults.standardUserDefaults().objectForKey("OAuth") == nil {
self.window = UIWindow(frame:UIScreen.mainScreen().bounds)
var storyboard = UIStoryboard(name: "Main", bundle: nil)
var loginVC = storyboard.instantiateViewControllerWithIdentifier("LOGIN_VC") as LoginVC
self.window?.rootViewController = loginVC
self.window?.makeKeyAndVisible()
}
return true
}
用户成功登录后调用此方法
func dismissLoginVC() {
var tabbarController = self.storyboard?.instantiateViewControllerWithIdentifier("TABBAR") as UITabBarController
self.presentViewController(tabbarController, animated: true, completion: nil)
let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
appDelegate.window?.rootViewController = tabbarController
}
我知道这个问题是它只是创建了一个新的 tabbarcontroller,而不是引用在故事板中设置为 initialView 的现有 tabbarController。这似乎可行,但它缺少导航栏中的其他项目。
感谢您为我指明正确的方向!
我认为您应该更改您的应用程序结构。将选项卡栏控制器保留为情节提要中的初始视图控制器,并在第一个选项卡中通过控制器的 viewDidAppear 方法以模态方式(无动画)呈现登录控制器——这将是用户看到的第一件事。当您关闭它时,您将返回到第一个选项卡中的该控制器。使用这种方法,您不需要应用程序委托中的任何代码。
我有一个带有初始登录屏幕的标签栏应用程序。 tabbarController 被设置为 Storyboard 中的初始视图,其中 1 VC 还嵌入了 navigationController。
我有一个登录VC实例化并在我的 AppDelegate 中设置为 rootViewController。用户从 loginVC 成功登录后,我需要切换到 tabbarController。我会尝试获取对 tabbarcontroller 的引用并将其设置为新的 rootviewcontroller 吗?如果是这样,我很难弄清楚如何做到这一点:/
AppDelegate
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if NSUserDefaults.standardUserDefaults().objectForKey("OAuth") == nil {
self.window = UIWindow(frame:UIScreen.mainScreen().bounds)
var storyboard = UIStoryboard(name: "Main", bundle: nil)
var loginVC = storyboard.instantiateViewControllerWithIdentifier("LOGIN_VC") as LoginVC
self.window?.rootViewController = loginVC
self.window?.makeKeyAndVisible()
}
return true
}
用户成功登录后调用此方法
func dismissLoginVC() {
var tabbarController = self.storyboard?.instantiateViewControllerWithIdentifier("TABBAR") as UITabBarController
self.presentViewController(tabbarController, animated: true, completion: nil)
let appDelegate: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
appDelegate.window?.rootViewController = tabbarController
}
我知道这个问题是它只是创建了一个新的 tabbarcontroller,而不是引用在故事板中设置为 initialView 的现有 tabbarController。这似乎可行,但它缺少导航栏中的其他项目。
感谢您为我指明正确的方向!
我认为您应该更改您的应用程序结构。将选项卡栏控制器保留为情节提要中的初始视图控制器,并在第一个选项卡中通过控制器的 viewDidAppear 方法以模态方式(无动画)呈现登录控制器——这将是用户看到的第一件事。当您关闭它时,您将返回到第一个选项卡中的该控制器。使用这种方法,您不需要应用程序委托中的任何代码。