如何使用 Swift、iOS 7 设置 rootViewController
Posted
技术标签:
【中文标题】如何使用 Swift、iOS 7 设置 rootViewController【英文标题】:How to set the rootViewController with Swift, iOS 7 【发布时间】:2014-06-19 22:03:56 【问题描述】:我想在应用委托中设置 rootViewController ..
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool
var rootView: MyRootViewController = MyRootViewController()
//Code to set this viewController as the root view??
return true
【问题讨论】:
它的代码行与目标 c 中的代码行完全相同 是的,但我对 Objective-C 不是很熟悉。 如果您使用情节提要,则不需要设置根视图控制器。如果您不使用情节提要,则应该使用。 @JackWu 荒谬的声明。 为什么要投反对票? 【参考方案1】:如果您正在使用情节提要并希望以编程方式设置 rootViewController,请首先确保 ViewController 在身份检查器中具有情节提要 ID。 然后在 AppDelegate 中执行以下操作:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
// get your storyboard
let storyboard = UIStoryboard(name: "Main", bundle: nil)
// instantiate your desired ViewController
let rootController = storyboard.instantiateViewControllerWithIdentifier("MyViewController") as! UIViewController
// Because self.window is an optional you should check it's value first and assign your rootViewController
if let window = self.window
window.rootViewController = rootController
return true
【讨论】:
我正在使用 Swift 2.0,这个小改动在故事板中对我有用let rootController = storyboard.instantiateViewControllerWithIdentifier("MyViewController") as UIViewController
【参考方案2】:
你可以这样做。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool
var rootView: MyRootViewController = MyRootViewController()
if let window = self.window
window.rootViewController = rootView
return true
【讨论】:
我刚刚在 Xcode 7.1 上使用了这段代码,编译器表示由于 rootView 永远不会发生变异,因此可以使用let
关键字而不是 var
将其设为常量。【参考方案3】:
Swift 2.0:
var window: UIWindow?
var storyboard:UIStoryboard?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.makeKeyAndVisible()
storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootController = storyboard!.instantiateViewControllerWithIdentifier("secondVCID")
if let window = self.window
window.rootViewController = rootController
【讨论】:
【参考方案4】:如果您不使用情节提要,为了让它显示,您需要做一些事情。在函数应用程序内的 AppDelegate 内。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
// Override point for customization after application launch.
let frame = UIScreen.mainScreen().bounds
window = UIWindow(frame: frame)
let itemsViewControler: UITableViewController = BNRItemsViewController()
if let window = self.window
window.rootViewController = itemsViewControler
window.makeKeyAndVisible()
return true
【讨论】:
虽然情节提要的答案确实为我提供了正确的控制器,但这个答案确实会触发,但我最终会出现黑屏:-/【参考方案5】: if let tabBarController = self.window!.rootViewController as? UITabBarController
tabBarController.selectedIndex = 0
【讨论】:
以上是关于如何使用 Swift、iOS 7 设置 rootViewController的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 UINavigationController (Swift 2.0 iOS 9) 强制设置横向方向