У меня есть некоторая логика, которую я хочу сделать на своем LaunchScreen, и если проверка в порядке, я хочу перейти к viewController, а если нет, я хочу перейти к другому, возможно ли это?
Перейти от LaunchScreen к viewController в Main.Storyboard?
Ответы (5)
У меня есть логика, которую я хочу реализовать на своем LaunchScreen.
Теперь, когда я понял вопрос, я могу ответить на него: не надо. Сделайте свою трудоемкую логику позже. Ваша задача — запустить быстро. Вам нужно выйти из applicationDidFinishLaunchingWithOptions
, выйти из viewDidLoad
и запустить.
Что вы покажете в этот момент, зависит от вас; если у вас есть трудоемкие вещи (в вашем случае это звучит так, как будто вы работаете в сети или делаете что-то еще, что требует времени, пока вы загружаете источник данных для таблицы), и вы хотите показать специальный контроллер представления, который охватывает время с вращающимся представлением активности или чем-то еще, хорошо. Но во время фактического запуска не время делать это.
viewDidLoad
. Вы просто реализуете сообщения о событиях, чтобы они делали то, что уместно в данный момент, не больше и не меньше.
- person matt; 17.08.2018
Нет, вы не можете кодировать launchScreen.Storyboard
. Причина: когда ваш launchScreen.storyboard
показывает, что приложение все еще загружается.
Проще говоря: Вы не можете получить доступ к своему приложению, когда оно отображает launchScreen.storyboard
, все, что вы можете сделать, это создать для него UI/UX, не выполняя для него никакого кода.
Альтернатива: - Сделайте viewController
, который появляется как первый viewController, проверьте свою логику и сделайте что-то оттуда соответствующим образом!
Ссылка: - https://stackoverflow.com/a/27642160/6297658
Ваш LaunchScreen отображается во время загрузки вашего приложения. Перейдите к своему AppDelgate
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
window.rootViewController = //your root view controller that you have figured out with logic
return true
}
Запустите проверку в didFinishLaunchingWithOptions()
и используйте ее, чтобы «перейти» непосредственно к определенному vc. Вот пример использования userDefaults, но, конечно, вы можете заменить его любой проверкой, которую вы выполняете.
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Do some logic
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let welcomeVC = storyboard.instantiateViewControllerWithIdentifier("WelcomeNavController")
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = welcomeVC
self.window?.makeKeyAndVisible()
}
}
didFinishLaunching
и выйти из viewDidLoad
и запустить очень быстро. Что вы будете делать после, это ваше дело.
- person matt; 13.09.2016
Добавьте эту функцию в AppDelegate
:
func initialVC(storyboardID: String) {
let mainStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("\(storyboardID)") as UIViewController
self.window?.makeKeyAndVisible()
if storyboardID == "tabBarVC" {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = initialViewController
} else {
let navController = UINavigationController(rootViewController: initialViewController)
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = navController
}
}
В методе didFinishLaunchingWithOptions
внутри AppDelegate
вы можете добавить это:
if currentUser != nil {
initialVC("tabBarVC")
} else {
initialVC("loginVC")
}
В моем примере вы можете видеть, что я либо загружаю VC основного приложения, либо VC входа в зависимости от того, вошел ли пользователь в систему. В вашем случае вы можете использовать оператор if-else и выполнять логику внутри функции initialVC
.
Примечание. Когда я вызываю загрузку loginVC
, мне нужно загрузить navigationController
, потому что loginVC
встроен в navigationController. Для tabBarVC
я не вставляю navController
, потому что он не нужен.