如何使用 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) 强制设置横向方向

如何使用swift更改wifi DNS设置iOS

Swift:从 iOS 7 编译存档时出现分段错误

我们可以在部署目标小于 iOS 7 的应用程序中集成 swift 的代码吗?

GPUImage Swift iOS 7

如何使用swift在iOS中为活动设置两种不同大小的背景图像作为横向和纵向模式