登录时使用所有值打开选项卡栏控制器
Open Tab Bar controller with all values on login
成功登录后,我正在尝试导航到标签栏控制器。我写的代码贴在下面。
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?
所以,这是一个简单的方法,
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
}
你决定设置它是因为假设你在上面的方法中有一些身份验证方法,在用户已经对自己进行正确的身份验证后执行自动登录。现在,这将过滤已经通过身份验证的用户和未通过身份验证的用户,如果他们未通过身份验证,则将他们发送到一个视图,该视图将为他们提供登录或注册选项。
因此,自动登录代码将设置一个选项卡栏控制器,将导航控制器放置为选项卡,然后将视图控制器作为这些导航控制器的根。然后你调用主导航Contoller "mainNav" 并使用方法"setViewControllers",你使用这个方法让你将应用程序的MAIN WINDOW 的根设置到"mainNav" 然后将 "sign up or login screen" 设置到 "mainNav" 的根目录,然后是标签栏控制器,这将允许您创建一个 "log out" 函数,当您 POP 到注销后应用程序委托的根视图控制器,您将看到带有这些按钮的 "log in" 或 "sign up" 屏幕,从而向用户表明他们确实已注销。好的,现在我们已经确定了,让我们转到 LoginViewController:
在登录视图控制器中,在成功验证后,您希望在 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 screen sign up/login" 视图控制器,你就设置好了。
现在您所做的是为您的应用程序创建一个导航设置,其中启动画面始终位于 mainNav 的根目录,而 Tabbar 控制器始终位于第二位。这将使您完全控制登录、注销和注册。
它的工作方式是您将 mainNav 声明为 AppDelegate 的 属性,这使您可以在整个应用程序中访问此 属性,因此您始终可以从 LoginVc 和 SignUpVc从 AppDelegate 调用 mainNav 来设置您的视图控制器,从而始终控制应用程序的整个层次结构。
这是一种非常先进的做事方式,如果您想更深入,它甚至比这更先进,例如,您可以 "presentViewController" 使用 mainNav 属性 AppDelegate 只要你想,你也可以在 mainNav 上执行 "popToRootViewController" 并且整个应用程序都会关闭,除了 "splash screen" 向新用户显示 "sign up" 或"log in" 按钮。
这是迄今为止设置应用程序前端处理的最佳方式,一旦掌握了它,它就是最简单的方式,它使您能够控制整个导航堆栈,而无需质疑在哪里你在应用程序中。你很可能对此有疑问,因为我看到你正在使用故事板,所以它是这样的:
入口点 ===> mainVC 然后 mainVC 有上面的东西,这是设置它的方法,你有一个 mainVC,然后是 UITabBarController 的每个选项卡的 UINavigationController,等等
祝你好运!
成功登录后,我正在尝试导航到标签栏控制器。我写的代码贴在下面。
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?
所以,这是一个简单的方法,
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
}
你决定设置它是因为假设你在上面的方法中有一些身份验证方法,在用户已经对自己进行正确的身份验证后执行自动登录。现在,这将过滤已经通过身份验证的用户和未通过身份验证的用户,如果他们未通过身份验证,则将他们发送到一个视图,该视图将为他们提供登录或注册选项。
因此,自动登录代码将设置一个选项卡栏控制器,将导航控制器放置为选项卡,然后将视图控制器作为这些导航控制器的根。然后你调用主导航Contoller "mainNav" 并使用方法"setViewControllers",你使用这个方法让你将应用程序的MAIN WINDOW 的根设置到"mainNav" 然后将 "sign up or login screen" 设置到 "mainNav" 的根目录,然后是标签栏控制器,这将允许您创建一个 "log out" 函数,当您 POP 到注销后应用程序委托的根视图控制器,您将看到带有这些按钮的 "log in" 或 "sign up" 屏幕,从而向用户表明他们确实已注销。好的,现在我们已经确定了,让我们转到 LoginViewController:
在登录视图控制器中,在成功验证后,您希望在 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 screen sign up/login" 视图控制器,你就设置好了。
现在您所做的是为您的应用程序创建一个导航设置,其中启动画面始终位于 mainNav 的根目录,而 Tabbar 控制器始终位于第二位。这将使您完全控制登录、注销和注册。
它的工作方式是您将 mainNav 声明为 AppDelegate 的 属性,这使您可以在整个应用程序中访问此 属性,因此您始终可以从 LoginVc 和 SignUpVc从 AppDelegate 调用 mainNav 来设置您的视图控制器,从而始终控制应用程序的整个层次结构。
这是一种非常先进的做事方式,如果您想更深入,它甚至比这更先进,例如,您可以 "presentViewController" 使用 mainNav 属性 AppDelegate 只要你想,你也可以在 mainNav 上执行 "popToRootViewController" 并且整个应用程序都会关闭,除了 "splash screen" 向新用户显示 "sign up" 或"log in" 按钮。
这是迄今为止设置应用程序前端处理的最佳方式,一旦掌握了它,它就是最简单的方式,它使您能够控制整个导航堆栈,而无需质疑在哪里你在应用程序中。你很可能对此有疑问,因为我看到你正在使用故事板,所以它是这样的:
入口点 ===> mainVC 然后 mainVC 有上面的东西,这是设置它的方法,你有一个 mainVC,然后是 UITabBarController 的每个选项卡的 UINavigationController,等等
祝你好运!