我有一个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
内。
答案 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]
}
}