ios - DismissViewController swift

标签 ios swift uiviewcontroller

如果用户已登录,我的应用程序具有以下流程

加载屏幕 -----> 主屏幕 -----> 应用程序的其余部分

如果他不在,则以下流程:

加载屏幕 -----> 登录屏幕 -----> 主屏幕 -----> 应用程序的其余部分

现在我正在实现注销功能。我已将以下代码添加到 main Screen 中:

func handleLogout() {
        if self.presentingViewController != nil {
            var vc = self.presentingViewController
            while ((vc!.presentingViewController) != nil) {
                vc = vc!.presentingViewController
            }
            vc?.dismissViewControllerAnimated(true, completion: {
            })
        }
}

当应用返回到 加载屏幕 然后按预期加载 Login Screen。但是,如果遵循 2nd 路径(应用启动时用户未登录,并且使用了 Login Screen)代码导致 Login Screen 被直接打开,整个注销过程失败。有没有一种方法可以确保 Loading Screen 始终由此代码加载,而不管遵循两条路径中的哪一条。

最佳答案

使用 unwind segues!

您基本上添加了一个连接“主屏幕”和“登录屏幕”的展开转场。给它一个标识符,你可以随时启动 segue。在 handleLogout 中:

func handleLogout() {
    self.performSegueWithIdentifier("your identifier", sender: self)
}

有关如何创建展开转场的详细信息:https://www.andrewcbancroft.com/2015/12/18/working-with-unwind-segues-programmatically-in-swift/

关于ios - DismissViewController swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38809366/

相关文章:

ios - 错误初始化 AZSCloudStorageAccount Swift 3

ios - 如何在 iOS 的不同语言环境中格式化日期范围(只有一年字符串)?

ios - RTSP 到 HTTP 分包转码的示例。西兰农

swift - UITableViewCell ImageView 总是显示不同的数据

ios - 在 Swift 中将对象数组排序为每个可能的序列

iphone - 添加 View 时崩溃 (SIGABRT)。 ( WebView )

iphone - 推送新的 UIVIew 时禁用所有交互 UIViewcontroler

ios - 设置 UIStoryboardSegue 子类的属性 [模态 segue 上的可选动画]

swift - 使用 Swift 获取核心数据实体

ios - 自定义 UIViewController 转换?