2014-06-19 6 views
24

Ich möchte, um den RootViewController im AppDelegate setzen ..Wie die RootViewController mit Swift, iOS 7

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

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


    return true 

} 
+0

seine buchstäblich die gleiche Codezeile wie in Ziel c – Jack

+0

Ja, aber ich bin nicht wirklich, dass vertraut mit Objective-C. –

+0

Wenn Sie Storyboards verwenden, müssen Sie den Root View Controller nicht einstellen. Wenn Sie keine Storyboards verwenden, sollten Sie es sein. – Jack

Antwort

26

Sie können etwas tun.

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

    var rootView: MyRootViewController = MyRootViewController() 

    if let window = self.window{ 
      window.rootViewController = rootView 
    } 

    return true 
} 
+4

Ich habe diesen Code nur für Xcode 7.1 verwendet, und der Compiler gab an, da rootView niemals mutiert wird, könnte man eine Konstante mit dem Schlüsselwort 'let' anstelle von' var' machen. – bneely

11

Um es zu zeigen, gibt es einige Dinge, die Sie tun müssen, wenn Sie kein Storyboard verwenden. Innerhalb der AppDelegate innerhalb der Funktion Anwendung.

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

Während die Storyboard-Antwort den richtigen Controller für mich präsentiert, feuert diese Antwort, aber ich lande mit einem schwarzen Bildschirm: -/ – SeeCoolGuy

44

Wenn Sie ein Storyboard verwenden und möchten Ihre RootViewController programmatisch setzen, zuerst sicher, dass der Viewcontroller machen hat eine Storyboard-ID im Identity Inspector. Dann in der AppDelegate wie folgt vor:

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

Ich benutze Swift 2.0 und diese kleine Änderung funktionierte für mich im Storyboard 'let rootController = Storyboard. instanziateViewControllerWithIdentifier ("MyViewController") als UIViewController' – SeeCoolGuy

14

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 
    } 
+0

Schöne Lösung .. –

+1

funktioniert nicht in Swift 3. Ich weiß nicht warum –

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