我的应用程序有一个导航 Controller ,其中第一个 View Controller 是登录屏幕,所有其他屏幕都被推到顶部。
每当对后端的任何 HTTP 请求返回 401 错误时,我都想回到登录屏幕。
我的想法是向 ViewController 类添加一个扩展,如下所示:
extension UIViewController {
func unwindToLoginScreen() {
performSegue(withIdentifier: loginScreen)
}
}
并且 segue 将是一个 unwind segue。然后,每当请求失败时,我都会调用 View Controller 的 unwindToLoginScreen
方法。
但是,这种方法的问题是我必须记住在 Storyboard上为我添加到项目中的所有新 View Controller 创建所说的展开转场。
到目前为止,我认为理想的计划是能够以编程方式创建展开转场,而不是使用 Storyboard。因此,默认情况下,我的 unwindToLoginScreen()
扩展方法可以在任何新的 View Controller 中使用。像这样的东西:
extension UIViewController {
func unwindToLoginScreen() {
let segue = UnwindSegue(identifier: "blablah", segue: LoginViewController.unwindToLoginViewController)
segue.perform()
}
}
有没有可能做这样的事情?
最佳答案
您不能在代码中创建 segue,但您可以弹出到 UINavigationController
堆栈的根:
func returnToLoginScreen() {
self.navigationController?.popToRootViewController(animated: true)
}
如果你想弹出一个不是根的 viewController,你可以在 UINavigationController
管理的 viewController 数组中找到它,然后调用 popToViewController
:
// pop to second viewController in the stack
self.navigationController?.popToViewController(self.navigationController!.viewControllers[1], animated: true)
... 或按类型搜索 ViewController
:
if let loginVC = self.navigationController?.viewControllers.first(where: { $0 is LoginViewController }) {
self.navigationController?.popToViewController(loginVC, animated: true)
}
关于ios - 是否可以通过编程方式创建 unwind segue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56280112/