Проблема при отклонении viewController от rootViewController - PullRequest
1 голос
/ 05 апреля 2019

Я пытаюсь отклонить viewController для rootViewController, пока signOut. Но проблема в том, что viewController не удаляется, он все еще остается на той же самой странице. Ниже я упомянул код, который использовал.

    let AppDel = UIApplication.shared.delegate as! AppDelegate
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let login = mainStoryboard.instantiateViewController(withIdentifier: "login")
    let nav = UINavigationController(rootViewController: login)
    AppDel.window!.rootViewController = nav
    AppDel.window?.rootViewController?.dismiss(animated: true, completion: nil)
    (AppDel.window?.rootViewController as? UINavigationController)?.popToRootViewController(animated: true)
    login.navigationController?.setNavigationBarHidden(true, animated: false)

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 05 апреля 2019

в делегате приложения введите функцию, которая берет новый контроллер представления и устанавливает его как root. чем отклоняет старый.

func updateRootViewController(with viewController: UIViewController) {
        guard let oldViewController = self.window?.rootViewController else { return }
        UIView.transition(from: oldViewController.view, to: viewController.view, duration: 0.3, options: [.transitionCrossDissolve, .allowAnimatedContent]) { _ in
            self.window!.rootViewController = viewController
            self.window!.makeKeyAndVisible()
            oldViewController.dismiss(animated: false) {
                oldViewController.view.removeFromSuperview()
            }
        }
    }
1 голос
/ 05 апреля 2019

Раньше я сталкивался с такой же проблемой.Я исправил проблему, выполнив все другие операции после успешного завершения работы контроллера.

Пожалуйста, обратитесь к образцу кода ниже.Я уверен, что это будет работать для вас.

    AppDel.window?.rootViewController?.dismiss(animated: true, completion: {
        (AppDel.window?.rootViewController as? UINavigationController)?.popToRootViewController(animated: true)
        login.navigationController?.setNavigationBarHidden(true, animated: false)    
    })
0 голосов
/ 05 апреля 2019
  • Почему вы отключили навигационный контроллер перед вызовом popToRootViewController ?

AppDel.window? .RootViewController? .Dismiss (анимированный: true, завершение: ноль)

  • Проверьте, звоните ли выэто из основного потока.Добавьте свой код внутри этого блока:

    DispatchQueue.main.async {
        // TODO: Your code
    }
    
...