В моем appdelegate я хочу проверить, globUs.hasName
. Если это так, я хочу, чтобы приложение Entry Point
было моим раскадровкой main
. Если это не так, я хочу, чтобы Entry Point
приложения было моим раскадровкой newUser
. Как установить точку входа в приложение? Если я не могу, то какой самый эффективный способ реализовать эту функциональность?Установить точку входа приложения программно в AppDelegate
ответ
Рассмотрите возможность не иметь точки входа. Затем, в 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
}
Когда я использую метод, подобный этому AppDel, выдает SIGABRT. В нем говорится, что «« Не удалось найти раскадровку с именем «OneStoryboard» в пакете NSBundle Users/gabrielspound/Library/Developer/CoreSimulator/Devices/6CB76037-BA27-45DA-8671-01AAF78E93A6/data/Контейнеры/Пакет/Приложение/0B5AC724 -BEF5-4DB6-A68F-8407A6ECF627/Social Justice.app> (загружен) '" Что означает поле« name: »в конструкторе UIStoryboard? Это произвольно или мне нужно использовать имя файла моей Main.storyboard? –
Это сработало, спасибо! –
@GabeSpound Да, вы используете имя файла – Shades
Попробуйте
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:)
в контроллере вида.
Отметьте комментарий, который я оставил для ответа выше, он также здесь. –
Я получил эту работу, но другой метод кажется более эффективным –
только что установил self.window? .rootViewController как ваш предпочтительный viewController in didFinishLaunchingWithOptions. –