ios 13: не удается условно перейти на другой viewontroller из AppDelegate.swift - PullRequest
0 голосов
/ 24 января 2020

Я установил свой контроллер вида входа в систему в качестве начального контроллера в раскадровке. Однако я хочу перейти к основному представлению моего приложения, когда у пользователя есть активный сеанс. вот что у меня есть:

func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    let sessionToken = "abcedef"

    let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
    if  sessionToken != nil {
        let tabBarVC = storyboard.instantiateViewController(identifier: "TabBarVC")
        tabBarVC.modalPresentationStyle = .fullScreen
        self.window?.rootViewController?.present(tabBarVC, animated: true, completion: nil)
    }
    return true
}

Но я все еще получаю страницу входа. Есть идеи, что я могу делать не так?

Ответы [ 4 ]

1 голос
/ 24 января 2020

In SceneDelegate.swift

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, 
    options connectionOptions: UIScene.ConnectionOptions) {

    let windowScene = UIWindowScene(session: session, connectionOptions: connectionOptions)
    self.window = UIWindow(windowScene: windowScene)

    let sessionToken = "abcedef"

    let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        if sessionToken != nil {
          let story = UIStoryboard(name: "Main", bundle:nil)
          let vc = story.instantiateViewController(withIdentifier: "InitialController") as! InitialController

          let rootNC = UINavigationController(rootViewController: vc) // As per need
          rootNC.isNavigationBarHidden = true
          self.window?.rootViewController = rootNC
          self.window?.makeKeyAndVisible()
        }
        guard let _ = (scene as? UIWindowScene) else { return }

}

Ниже iOS 13 AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
    self.initialRootVC()
    return true
}

func initialRootVC() {
    let story = UIStoryboard(name: "Main", bundle:nil)
    let vc = story.instantiateViewController(withIdentifier: "InitialController") as! InitialController
    let rootNC = UINavigationController(rootViewController: vc). // when require
    rootNC.isNavigationBarHidden = true
    self.window?.rootViewController = rootNC
    self.window?.makeKeyAndVisible()
}
0 голосов
/ 25 января 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).
    // Override point for customization after application launch.
    let story = UIStoryboard(name: "Main", bundle:nil)

    let sessionToken =  "abcedef"

    if sessionToken == nil || sessionToken!.isEmpty {
        let welcomeVC = story.instantiateViewController(withIdentifier: "WelcomeVC") as? WelcomeViewController
        self.window?.rootViewController = welcomeVC
    } else {
        let tbc = story.instantiateViewController(withIdentifier: "TabBarVC") as? TabBarController
        self.window?.rootViewController = tbc
    }
    guard let _ = (scene as? UIWindowScene) else { return }
}
0 голосов
/ 24 января 2020

для iOS 13 в SceneDelegate.swift Вы можете добавить ниже код

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

func initiateRootViewControlle() {
    let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
    let viewController = story.instantiateViewController(withIdentifier: "ViewController")
    let windowscene = UIApplication.shared.connectedScenes.first
    if let windowScene = windowscene as? UIWindowScene {
        self.window = UIWindow(windowScene: windowScene)
        self.window?.frame = UIScreen.main.bounds
        self.window?.windowLevel = UIWindow.Level.statusBar + 1
        self.window?.rootViewController = viewController
        self.window?.makeKeyAndVisible()
    }
}

Ниже iOS 13 добавить ниже код в AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    self.initRootController()
    return true
}

func initiateRootViewControlle() {
    let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
    let viewController = story.instantiateViewController(withIdentifier: "ViewController")
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window?.rootViewController = viewController
    self.window?.windowLevel = UIWindow.Level.normal
    self.window?.makeKeyAndVisible()
}

0 голосов
/ 24 января 2020

Я проверял этот код.

class AppDelegate: UIResponder, UIApplicationDelegate
{
    var window : UIWindow?
    static var sharedDelegate = AppDelegate()

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        AppDelegate.sharedDelegate = self
        window?.rootViewController = initialViewController()
        return true
    }
    private func initialViewController() -> UIViewController {
        let sessionToken = "abcd"
        if sessionToken.isEmpty {
            return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController") as! ViewController
        } else {
            return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "HomeVC") as! HomeVC
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...