SceneDelegate с условными раскадровками - PullRequest
0 голосов
/ 21 апреля 2020

До Xcode 11 можно было условно установить, с какого Storyboard запускать приложение iOS внутри AppDelegate. Теперь с добавлением SceneDelegate, насколько я понимаю, вы можете создать ту же самую логику c, с которой у меня возникают проблемы.

Если я установлю Storyboard Name внутри Application Scene Manifest I можно заставить приложение всегда запускаться на одной и той же раскадровке, но я хочу условно запустить на одной из двух раскадровок.

Я пробовал что-то подобное и с набором Storyboard Name, и без него внутри Application Scene Manifest но не могу заставить что-то работать. Есть идеи?

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let _ = scene as? UIWindowScene else {return}

    let storyboard: UIStoryboard
    let initViewController: UIViewController

    if (User.sharedInstance.isLoggedIn()) {
        storyboard = UIStoryboard(name: "Main", bundle: nil)
        initViewController = storyboard.instantiateViewController(withIdentifier: "MainTabs") as UIViewController
        self.window?.rootViewController = initViewController
    } else {
        storyboard = UIStoryboard(name: "Login", bundle: nil)
        initViewController = storyboard.instantiateViewController(withIdentifier: "LoginLanding") as UIViewController
        self.window?.rootViewController = initViewController
    }

    self.window?.makeKeyAndVisible()
}

1 Ответ

0 голосов
/ 22 апреля 2020

Похоже, проблема в том, что я не устанавливал окно со сценой.

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    guard let windowScene = scene as? UIWindowScene else {return}
    window = UIWindow(windowScene: windowScene)

    // if user is not logged in then don't use Main storyboard
    if (!User.sharedInstance.isLoggedIn()) {
        let storyboard = UIStoryboard(name: "Login", bundle: nil)
        window?.rootViewController =  storyboard.instantiateViewController(withIdentifier: "LoginLanding")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...