iOS 在 2 个导航控制器之间切换

问题描述 投票:0回答:3

在我的应用程序中,如果用户未登录,它会显示嵌入在导航控制器中的登录控制器。 当用户登录时,应用程序应切换到另一个导航控制器以显示该应用程序。

当用户登录时,如何从一个导航控制器切换到另一个导航控制器。 ?

谢谢

enter image description here

我正在检查用户是否登录应用程序委托:

 // 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
ios swift uinavigationcontroller
3个回答
7
投票

解决方案1

一种解决方案是仅使用单个导航控制器。当用户登录时,您将弹出用于登录的所有视图控制器并将主视图控制器压入堆栈。

解决方案2

或者,您可以在登录内容之上以模态方式呈现一个新的导航控制器,并以主控制器作为其根。它会简单地呈现在它之上。

解决方案3

您还可以考虑首先使用主视图控制器创建导航控制器,然后在其顶部呈现登录导航控制器。然后,当用户登录时,您只需关闭登录导航控制器即可显示主视图控制器。


4
投票

设置您的导航控制器故事板 ID

    let navigationController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("SecondNavigationController")
    self.presentViewController(navigationController, animated: true, completion: nil)

希望这有帮助。 :)


0
投票

这不是最好的方法,但它有效。✅

应用程序委托:

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)
}
© www.soinside.com 2019 - 2024. All rights reserved.