为什么即使我按下导航控制器也为零

时间:2020-05-23 15:18:15

标签: ios swift

我有一个LoginViewController,想推MainTabBarController 所以,我这样做

let controller = MainTabBarController()
navigationController?.pushViewController(controller, animated: true)

LoginViewController具有导航控制器,但是MainTabBarController由于某些原因而没有。

我有两个问题,如果我的流程是LoginViewController中嵌入的MainTabBarController-> Other Controllers-> MainTabBarController,并且我想注销,我如何获得到LoginViewController且没有内存泄漏?我在考虑类似popToRootViewController之类的东西,但不确定是否可行。

这就是我在MainTabBarController中创建其他控制器的方式

private func createNewViewController(viewController: UIViewController, title: String, imageName: String) -> UIViewController {
        navigationController?.navigationBar.prefersLargeTitles = true
        navigationController?.tabBarItem = UITabBarItem(title: title, image: UIImage(systemName: imageName), selectedImage: nil)
        navigationController?.view.backgroundColor = .white
        viewController.navigationItem.title = title
        return viewController
    }

但是,由于navigationController是nil,所以它实际上并没有用。我根本不使用情节提要。

编辑:显然不支持将UITabBarController嵌入UINavigationController内。

1 个答案:

答案 0 :(得分:0)

尝试此设计。当LoginVC出现时,它将检查用户是否已登录并重定向到MainVC。这只是一个简单的例子,请继续添加更多详细信息:

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        window = UIWindow()
        window?.makeKeyAndVisible()
        window?.rootViewController = LoginVC()

        return true
    }
}

class LoginVC: UIViewController {

    var isUserLoggedIn = true

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        view.backgroundColor = .red
        if isUserLoggedIn {
            present(MainVC(), animated: true)
        }
    }
}

class MainVC: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        modalPresentationStyle = .fullScreen

        let firstVC = UIViewController()
        firstVC.tabBarItem = UITabBarItem(title: "firstVC", image: nil, selectedImage: nil)

        let secondVC = UIViewController()
        secondVC.tabBarItem = UITabBarItem(title: "secondVC", image: nil, selectedImage: nil)

        viewControllers = [firstVC, secondVC]
    }
}