2017-02-11 89 views
4

在我的appdelegate中,我想檢查是否globUs.hasName。如果是這樣,我希望該應用的Entry Point爲我的main故事板。如果不是,我希望該應用的Entry Point爲我的newUser故事板。如何設置應用程序的入口點?如果我不能,那麼實現此功能的最有效方法是什麼?以編程方式在AppDelegate中設置應用程序入口點

+0

只需將self.window?.rootViewController設置爲您在didFinishLaunchingWithOptions函數中的首選viewController。 –

回答

3

考慮沒有入口點。然後,在appDelegate中,測試您的變量並相應地選擇適當的故事板。然後從該故事板顯示視圖控制器。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    if globUs.hasName { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let vc = storyboard.instantiateViewController(withIdentifier: "FirstMainVC") 
     self.window = UIWindow(frame: UIScreen.main.bounds) 
     self.window?.rootViewController = new 
     self.window?.makeKeyAndVisible() 
    } 
    else { 
     let storyboard = UIStoryboard(name: "NewUser", bundle: nil) 
     let vc = storyboard.instantiateViewController(withIdentifier: "FirstNewUserVC") 
     self.window = UIWindow(frame: UIScreen.main.bounds) 
     self.window?.rootViewController = welcomeVC 
     self.window?.makeKeyAndVisible() 
    } 

    return true 
} 
+0

當我使用類似於這個AppDel的方法拋出一個SIGABRT。它說「'在包NSBundle中找不到名爲'OneStoryboard'的故事板-BEF5-4DB6-A68F-8407A6ECF627/Social Justice.app>(loaded)'「 UIStoryboard構造函數中的」name:「字段的含義是什麼?它是任意的還是必須使用我的Main.storyboard的文件名? –

+0

這工作,謝謝! –

+0

@GabeSpound是的,你正在使用文件名 – Shades

0

嘗試

var sb = UIStoryboard(name: "OneStoryboard", bundle: nil) 
/// Load initial view controller 
var vc = sb.instantiateInitialViewController() 
/// Or load with identifier 
var vc = instantiateViewController(withIdentifier: "foobarViewController") 

/// Set root window and make key and visible 
self.window = UIWindow(frame: UIScreen.mainScreen.bounds) 
self.window.rootViewController = vc 
self.window.makeKeyAndVisible() 

或者嘗試在故事板上手動SEGUE。要執行手動搜索,您必須首先在故事板中定義帶有標識符的搜索隊列,然後在視圖控制器中調用performSegue(withIdentifier:sender:)

+0

查看評論我留在上面的答案,它也適用於這裏。 –

+0

我得到了這個工作,但其他方法似乎更有效 –

相關問題