打开标签栏控制器登录时的所有值

问题描述:

成功登录后,我试图导航到标签栏控制器。我写的代码粘贴在下面。打开标签栏控制器登录时的所有值

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
var viewController = storyboard.instantiateViewControllerWithIdentifier("MenuViewController") as! MenuViewController 
let nav = UINavigationController(rootViewController: viewController) 
self.presentViewController(nav, animated: true, completion: nil) 

它正确地重定向到第一个选项卡(MenuViewController)。但是,其余选项卡元素不可见。任何人都可以请建议,如果我可以直接调用tabbarcontroller而不是第一个viewcontroller?

+0

从你的代码,它看起来像viewController和loginViewController是相同的视图控制器是这个故意吗?他们都是“MenuViewControllers” – Loxx

+0

对不起,这是一个注释的部分!它目前没有在代码中使用! – rafavinu

+0

我看到了,只需一秒钟,我会告诉你,请评论代码,以便我们知道这是什么 – Loxx

所以,这里是一个简单的方法来做到这一点,

的AppDelegate:

比方说,你想在你的应用程序代理设置此像这样:

import UIKit 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 
    var navMain = UINavigationController() 

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

     self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 

     if (authenticated) { 
      var first = UIViewController(nibName: nil, bundle: nil) 
      var nav1 = UINavigationController() 
      nav1.viewControllers = [first] 

      var second = UIViewController(nibName: nil, bundle: nil) 
      var nav2 = UINavigationController() 
      nav2.viewControllers = [second] 

      var tabs = UITabBarController() 
      tabs.viewControllers = [nav1, nav2] 

      var LoginSignUpSplashPage = UIViewController(nibName: nil, bundle: nil) 

      navMain = UINavigationController() 
      self.window!.rootViewController = navMain; 
      navMain .setViewControllers([LoginSignUpSplashPage, tabs], animated: true) 

     } else { 
      var loginVC = UIViewController(nibName: nil, bundle: nil) 
      navMain = UINavigationController() 
      self.window!.rootViewController = navMain; 
      navMain .setViewControllers([loginVC], animated: true) 
     } 

     self.window?.makeKeyAndVisible(); 

     return true 
    } 

您决定设置这是因为假设你在上面的方法中有一些验证方法,在用户已经验证自己的权限后执行自动登录。现在,这将过滤已经通过身份验证的用户和未通过身份验证的用户,如果他们未通过身份验证,则将其发送到可为其提供登录或注册选项的视图。

因此,自动登录代码将设置一个tabbar控制器,将导航控制器作为选项卡,然后将视图控制器作为这些导航控制器的根。然后你调用主导航控制器“mainNav”并使用方法“setViewControllers”,你可以使用这个方法,以便将应用程序的MAIN WINDOW的根设置为“mainNav”,然后设置“注册或登录屏幕“到”mainNav“的根,然后接下来是标签栏控制器,这将允许您创建一个”注销“功能,当您登录后POP到应用程序委托的根视图控制器时,然后用这些按钮向用户呈现“登录”或“注册”屏幕,由此向用户指示他们确实已经注销。好吧,现在我们已经完成了登录控制器:

在登录视图控制器中,成功验证后,您希望在AppDelegate中拥有相同的设置,因此您可以这样做:

AFTER AUTHENTICATION: 
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
     let appDelegateVar = appDelegate.navMain 

     var first = UIViewController(nibName: nil, bundle: nil) 
     var nav1 = UINavigationController() 
     nav1.viewControllers = [first] 

     var second = UIViewController(nibName: nil, bundle: nil) 
     var nav2 = UINavigationController() 
     nav2.viewControllers = [second] 

     var tabs = UITabBarController() 
     tabs.viewControllers = [nav1, nav2] 

     var LoginSignUpSplashPage = UIViewController(nibName: nil, bundle: nil) 

     appDelegateVar .setViewControllers([LoginSignUpSplashPage, tabs], animated: true) 

这同样适用于SignUpViewController,同样的事情,他们注册,你目前的应用程序委托mainVC与tabbarcontroller和“闪屏注册/登录”视图控制器和你设置。

现在你只是为你的应用创建了一个导航,其中Splash屏幕始终位于mainNav的ROOT处,而Tabbar控制器始终位于第二位置。这将使您完全控制登录和注销和注册。

这种方式的工作原理是将mainNav声明为AppDelegate的一个属性,该属性允许您在整个应用程序中访问此属性,因此从LoginVc和SignUpVc始终可以从AppDelegate调用mainNav来设置您的viewcontrollers,从而总是控制应用程序的整个层次。

这是一种非常先进的做事方式,如果你想深入一些,它会变得更加先进,例如,你可以随时随地使用AppDelegate的mainNav属性“presentViewController”可以随时在mainNav上执行“popToRootViewController”,并且整个应用程序关闭,除了用“注册”或“登录”按钮呈现新的uesers的“启动画面”。

这是迄今为止设置应用程序前端处理的最佳方式,一旦掌握了它,它就是最简单的方法,它使您能够控制整个导航堆栈而无需询问您的位置在应用程序中。你会很可能有这方面的问题,因为我看到你正在使用故事板,所以它是这样的:

entry POINT ===> mainVC然后mainVC有上面的东西,这是如何设置它,你有一个主VC,然后UITabBarController的每个选项卡的UINavigationController等等。

祝你好运!