在我的应用程序中,如果用户未登录,它会显示嵌入在导航控制器中的登录控制器。 当用户登录时,应用程序应切换到另一个导航控制器以显示该应用程序。
当用户登录时,如何从一个导航控制器切换到另一个导航控制器。 ?
谢谢
我正在检查用户是否登录应用程序委托:
// Check if user is log
let currentUser = PFUser.currentUser()
if currentUser != nil {
// Do stuff with the user
} else {
// Show the signup or login screen
let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let nav = mainStoryboardIpad.instantiateViewControllerWithIdentifier("LogInController") as! UINavigationController
self.window?.rootViewController = nav
}
解决方案:看起来可行
当用户按下登录按钮时:
let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let nav = mainStoryboardIpad.instantiateViewControllerWithIdentifier("MainNavController") as! UINavigationController
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.window?.rootViewController = nav
一种解决方案是仅使用单个导航控制器。当用户登录时,您将弹出用于登录的所有视图控制器并将主视图控制器压入堆栈。
或者,您可以在登录内容之上以模态方式呈现一个新的导航控制器,并以主控制器作为其根。它会简单地呈现在它之上。
您还可以考虑首先使用主视图控制器创建导航控制器,然后在其顶部呈现登录导航控制器。然后,当用户登录时,您只需关闭登录导航控制器即可显示主视图控制器。
设置您的导航控制器故事板 ID
let navigationController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("SecondNavigationController")
self.presentViewController(navigationController, animated: true, completion: nil)
希望这有帮助。 :)
这不是最好的方法,但它有效。✅
应用程序委托:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
AppRouter.shared.setAppFlow(.onboarding, animated: false)
return true
}
经理:
self.window.rootViewController = 您的 UINavigationController 类型
class AppRouter {
enum FlowType {
case onboarding
case app
}
static let shared = AppRouter()
var window: UIWindow = UIWindow(frame: UIScreen.main.bounds)
func setAppFlow(_ type: FlowType, animated: Bool) {
self.withTransition(animated)
switch type {
case .onboarding:
self.window.rootViewController = UINavigationController(rootViewController: TestViewController())
case .app:
self.window.rootViewController = UINavigationController(rootViewController: MainTableViewController())
}
self.window.makeKeyAndVisible()
}
private func withTransition(_ bool: Bool) {
guard bool else { return }
let transition = CATransition()
transition.duration = 0.3
transition.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
transition.type = .push
transition.subtype = .fromRight
transition.fillMode = .both
self.window.layer.add(transition, forKey: kCATransition)
}
}
用于找零:
@objc func myButtonAction() {
AppRouter.shared.setAppFlow(.app, animated: true)
}