我有一个带有初始登录屏幕的标签栏应用。 tabbarController设置为带有1个VC且也已嵌入navigationController的Storyboard中的初始视图。
我实例化了一个loginVC,并在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,而不是引用在Storyboard中设置为initialView的现有tabbarController。这似乎可行,但导航栏中缺少其他项目。
感谢您指出正确的方向!
最佳答案
我认为您应该更改自己的应用结构。将选项卡栏控制器保留为情节提要中的初始视图控制器,并在第一个选项卡中以控制器的viewDidAppear方法以模态方式(不显示动画)显示登录控制器-这将是用户首先看到的内容。当您关闭它时,您将回到第一个选项卡中的控制器。使用这种方法,您在应用程序委托中不需要任何代码。
关于ios - 引用从AppDelegate中的StoryBoard创建的TabbarController?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29023561/