2017-02-11 16 views
4

В моем appdelegate я хочу проверить, globUs.hasName. Если это так, я хочу, чтобы приложение Entry Point было моим раскадровкой main. Если это не так, я хочу, чтобы Entry Point приложения было моим раскадровкой newUser. Как установить точку входа в приложение? Если я не могу, то какой самый эффективный способ реализовать эту функциональность?Установить точку входа приложения программно в AppDelegate

+0

только что установил self.window? .rootViewController как ваш предпочтительный viewController in didFinishLaunchingWithOptions. –

ответ

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. В нем говорится, что «« Не удалось найти раскадровку с именем «OneStoryboard» в пакете NSBundle (загружен) '" Что означает поле« name: »в конструкторе UIStoryboard? Это произвольно или мне нужно использовать имя файла моей 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 в раскадровке. Чтобы выполнить ручную сегрегацию, вы должны сначала определить segue с идентификатором в раскадровке, а затем вызвать performSegue(withIdentifier:sender:) в контроллере вида.

+0

Отметьте комментарий, который я оставил для ответа выше, он также здесь. –

+0

Я получил эту работу, но другой метод кажется более эффективным –