【问题标题】:Swift - pushing ViewController not working after presenting ViewController againSwift - 再次呈现 ViewController 后推动 ViewController 不起作用
【发布时间】:2020-05-11 06:13:43
【问题描述】:

这个问题听起来有点混乱,但我不知道如何更好地描述它。让我解释一下:

出现的第一个ViewControllerFirstLaunchVC,用户在其中输入他的电子邮件,如果他已注册,他将访问LoginVC,然后从那里访问MainVC。一切正常。

MainVC 中,用户可以退出并返回FirstLaunchVC。但是,在执行 weiterButton 之后应该将用户带到 LoginVC 之后没有做任何事情。

FirstLaunchVC:

@objc func weiterButtonTapped() {

    email = emailTextfield.text!.trimmingCharacters(in: .whitespacesAndNewlines)

    //prüfen, ob Email schon registriert ist
    Auth.auth().fetchSignInMethods(forEmail: email) { (methods, error) in

        //Email ist noch nicht registriert -> sign up
        if methods == nil {

            let SignUpView = self.storyboard?.instantiateViewController(withIdentifier: "SignUpVC") as! SignUpViewController

            SignUpView.email = self.email

            self.navigationController?.pushViewController(SignUpView, animated: false)

        }
        //Email ist registriert -> login
        else {
            print("hi")

            self.view.endEditing(true)

            let LoginView = self.storyboard?.instantiateViewController(withIdentifier: "LoginVC") as! LoginViewController

            LoginView.email = self.email

            self.navigationController?.pushViewController(LoginView, animated: true)
        }
    } 
}

主要问题:

print(hi) 正在打印,但pushViewController 在退出后无法正常工作。

登录VC:

func transitionToHome () {

    let homeVC =
    storyboard?.instantiateViewController(withIdentifier: Constants.Storyboard.homeViewController) as? MainViewController
    let navigationController = UINavigationController(rootViewController: homeVC!)

    view.window?.rootViewController = navigationController
    view.window?.makeKeyAndVisible()
}

MainVC:

这是用户可以退出的地方。

@objc func signoutButtonTapped() {
    UserDefaults.standard.setIsLoggedIn(value: false)
    UserDefaults.standard.synchronize()

    let firstLaunchVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "FirstLaunchVC")

    self.navigationController?.present(firstLaunchVC, animated: true)
}

我尽力解释问题。如果还有什么不清楚的,请告诉我。我很高兴得到任何帮助:)

【问题讨论】:

  • 导航控制器用于推动 viewController 不显示新的,因此将行更改为 'self.navigaitonController?.push(firstLaunchVC,animated)'
  • 好的,这确实有效,但我想要present 动画而不是push 动画。这可能吗?
  • 您可以更改 google 的演示样式
  • 是的,在这里找到它:stackoverflow.com/questions/31970617/…。谢谢:)

标签: ios swift uiviewcontroller uinavigationcontroller


【解决方案1】:

如果退出后调用了weiterButtonTapped(),

你应该把你的 pushController 线放在 dispatch 那是因为控制器被完全释放了:

    DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
        self.navigationController?.pushViewController(LoginView, animated: true)
    }

【讨论】:

  • 这段代码是在主线程中运行的,没必要去检查,还有为什么延迟3秒可以尽快完成。当按钮被触摸时。
  • @kjoe navigationcontroller 可以显示控制器,不是 3 秒而是 0.3 秒
  • 我在 UINavigationController 中看不到当前方法,仅在 uistotyboard 中显示推送记住导航控制器不能模态显示视图控制器,使用 0.3 并没有真正的区别更好地使用 DispatchQueue.main.async {}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
相关资源
最近更新 更多