显示来自 AppDelegate 的两个 ViewController
Show two ViewController from AppDelegate
APP 启动时 - 启动 SigninView - 没问题。接下来如果成功 - 我需要 showTripController()。功能正常但没有任何显示?有什么问题吗?
func showSigninView() {
let controller = self.window?.rootViewController!.storyboard?.instantiateViewControllerWithIdentifier("DRVAuthorizationViewController")
self.window?.rootViewController!.presentViewController(controller!, animated: true, completion: nil)
}
func showTripController() {
let cv = self.window?.rootViewController!.storyboard?.instantiateViewControllerWithIdentifier("DRVTripTableViewController")
let nc = UINavigationController()
self.window?.rootViewController!.presentViewController(nc, animated:true, completion: nil)
nc.pushViewController(cv!, animated: true);
}
首先你必须在使用 window 之前添加这个:
self.window.makeKeyAndVisible()
另一件要记住的事情是:
有时 keyWindow 可能已被 window 替换为 nil rootViewController(在 iPhone 上显示 UIAlertViews、UIActionSheets 等),在这种情况下,您应该使用 UIView 的 window 属性.
所以,不要使用 rootViewController,而是使用它提供的最上面的那个:
extension UIApplication {
class func topViewController(base: UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController) -> UIViewController? {
if let nav = base as? UINavigationController {
return topViewController(base: nav.visibleViewController)
}
if let tab = base as? UITabBarController {
if let selected = tab.selectedViewController {
return topViewController(base: selected)
}
}
if let presented = base?.presentedViewController {
return topViewController(base: presented)
}
return base
}
}
if let topController = UIApplication.topViewController() {
topController.presentViewController(vc, animated: true, completion: nil)
}
替换 showTripController 的最后 3 行如下:
let nc = UINavigationController(rootViewController: cv));
self.window!.rootViewController = nc
APP 启动时 - 启动 SigninView - 没问题。接下来如果成功 - 我需要 showTripController()。功能正常但没有任何显示?有什么问题吗?
func showSigninView() {
let controller = self.window?.rootViewController!.storyboard?.instantiateViewControllerWithIdentifier("DRVAuthorizationViewController")
self.window?.rootViewController!.presentViewController(controller!, animated: true, completion: nil)
}
func showTripController() {
let cv = self.window?.rootViewController!.storyboard?.instantiateViewControllerWithIdentifier("DRVTripTableViewController")
let nc = UINavigationController()
self.window?.rootViewController!.presentViewController(nc, animated:true, completion: nil)
nc.pushViewController(cv!, animated: true);
}
首先你必须在使用 window 之前添加这个:
self.window.makeKeyAndVisible()
另一件要记住的事情是:
有时 keyWindow 可能已被 window 替换为 nil rootViewController(在 iPhone 上显示 UIAlertViews、UIActionSheets 等),在这种情况下,您应该使用 UIView 的 window 属性.
所以,不要使用 rootViewController,而是使用它提供的最上面的那个:
extension UIApplication {
class func topViewController(base: UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController) -> UIViewController? {
if let nav = base as? UINavigationController {
return topViewController(base: nav.visibleViewController)
}
if let tab = base as? UITabBarController {
if let selected = tab.selectedViewController {
return topViewController(base: selected)
}
}
if let presented = base?.presentedViewController {
return topViewController(base: presented)
}
return base
}
}
if let topController = UIApplication.topViewController() {
topController.presentViewController(vc, animated: true, completion: nil)
}
替换 showTripController 的最后 3 行如下:
let nc = UINavigationController(rootViewController: cv));
self.window!.rootViewController = nc