【问题标题】:How to set the rootViewController with Swift, iOS 7如何使用 Swift、iOS 7 设置 rootViewController
【发布时间】: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 荒谬的声明。
  • 为什么要投反对票?

标签: ios swift


【解决方案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
        }
    

    【讨论】:

      猜你喜欢
      • 2020-01-24
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 2020-01-30
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多