注册按钮在处理 RootViewController 时不起作用?

SignUp Button Not Working While Handling RootViewController?

我正在使用 Storyboard 构建一个 iOS 应用程序。根视图控制器是一个主视图控制器。我正在创建 login/logout 进程,它大部分工作正常,但我遇到了一些问题。我需要知道设置所有这些的最佳方法。 当我点击登录和注销时,该应用程序运行正常,但是当我点击注册时,没有任何效果,我也创建了一个导航控制器。 我只是不确定目前最好的方法是什么。

我给你我的详细信息

这是我的切换器Class用于管理视图

import UIKit

class Switcher {

static func updateRootViewController() {

    let status = UserDefaults.standard.bool(forKey: Constants.kUserDefaults.isSignIn)
    var rootViewController : UIViewController?

    #if DEBUG
    print(status)
    #endif

    if (status == true) {
        let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
        let mainTabBarController = mainStoryBoard.instantiateViewController(withIdentifier: Constants.StoryboardID.homeViewController) as! HomeViewController
        rootViewController = mainTabBarController
    }  else {
    
        let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
        let signInViewController = mainStoryBoard.instantiateViewController(withIdentifier: Constants.StoryboardID.signInViewController) as! SignInViewController
        rootViewController = signInViewController
    }

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.window?.rootViewController = rootViewController

   }

   }

我的应用代理

class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?
let storyBoard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    IQKeyboardManager.shared.enable = true
    Switcher.updateRootViewController()
    return true
}

注册按钮

@IBAction func signUpBtnTapped(_ sender: UIButton) {
    let storyBoard = UIStoryboard(name: "Main", bundle: nil)
    guard let signUpVC = storyBoard.instantiateViewController(withIdentifier: "RegistrationViewController") as? RegistrationViewController else {
        return
    }
    print("Register Tapped")
    self.navigationController?.pushViewController(signUpVC, animated: true)
}

问题是您的 rootViewController 没有为两个 Viewcontroller 设置 UINavigationViewController。 你需要做的不是像这样实例化:

    if (status == true) {
        let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
        let mainTabBarController = mainStoryBoard.instantiateViewController(withIdentifier: Constants.StoryboardID.homeViewController) as! HomeViewController
        rootViewController = mainTabBarController
    }  else {

        let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
        let signInViewController = mainStoryBoard.instantiateViewController(withIdentifier: Constants.StoryboardID.signInViewController) as! SignInViewController
        rootViewController = signInViewController
}

您需要实例化一个 UINavigationController,它的根如下所示

        if (status == true) {
        let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
        let mainTabBarController = mainStoryBoard.instantiateViewController(withIdentifier: Constants.StoryboardID.homeViewController) as! HomeViewController
        let navigationController = UINavigationController(rootViewController: mainTabBarController)
        rootViewController = navigationController
    }  else {

        let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
        let signInViewController = mainStoryBoard.instantiateViewController(withIdentifier: Constants.StoryboardID.signInViewController) as! SignInViewController
        let navigationController = UINavigationController(rootViewController: signInViewController)

        rootViewController = navigationController
    }

现在您的 self.navigationController?.pushViewController(signUpVC, animated: true) 可以工作了,因为存在“navigationController”。