Как установить RootViewController с помощью Swift, iOS 7

#ios #swift

#iOS #swift

Вопрос:

Я хочу установить RootViewController в делегате приложения..

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {

     var rootView: MyRootViewController = MyRootViewController()
     //Code to set this viewController as the root view??


     return true

}
 

Комментарии:

1. это буквально та же строка кода, что и в objective c

2. Да, но я не очень хорошо знаком с Objective-C.

3. Если вы используете раскадровки, вам не нужно устанавливать корневой контроллер представления. Если вы не используете раскадровки, вы должны быть.

4. @JackWu Нелепое заявление.

5. Почему язвительные отрицательные голоса?

Ответ №1:

Если вы используете раскадровку и хотите настроить свой RootViewController программно, сначала убедитесь, что ViewController имеет идентификатор раскадровки в инспекторе идентификации. Затем в 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
}
 

Комментарии:

1. я использую 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
}
 

Комментарии:

1. Я только что использовал этот код в 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
}
 

Комментарии:

1. хотя в ответе на раскадровку действительно указан правильный контроллер для меня, этот ответ срабатывает, но в итоге я получаю черный экран :-/

Ответ №5:

    if let tabBarController = self.window!.rootViewController as? UITabBarController
    {
        tabBarController.selectedIndex = 0
    }