You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

应用开发中如何关闭中间控制器 实现退登直接返回主屏幕

实现方案

你可以通过「dismiss第二个页面的同时直接present第三个页面」的逻辑完成需求,具体实现分以下步骤:

步骤1:给主屏幕(第一个页面)添加Unwind Segue关联

首先在主屏幕对应的ViewController代码中添加如下方法,用于接收SignOut后的返回回调:

@IBAction func unwindToHomeScreen(_ unwindSegue: UIStoryboardSegue) {
    // 可在这里添加返回主屏幕后需要执行的逻辑,比如清空登录态等
}

之后在Storyboard中,按住Ctrl拖动第三个页面的「SignOut」按钮到第三个页面顶部的Exit图标,选择刚才添加的unwindToHomeScreen方法,完成unwindSegue的绑定。

步骤2:修改第二个页面(SignIn页面)的跳转逻辑

第二个页面点击「SignIn」按钮后的跳转不要直接用segue跳第三个页面,而是先dismiss自身,dismiss的完成回调中再让主屏幕present第三个页面,代码示例如下:

// 第二个页面SignIn按钮的点击方法
@IBAction func signInButtonTapped(_ sender: UIButton) {
    // 先拿到当前的presentingViewController,也就是主屏幕
    guard let homeVC = self.presentingViewController else { return }
    // dismiss当前第二个页面,完成后由主屏幕present第三个页面
    self.dismiss(animated: true) {
        // 这里用segue或者手动初始化第三个页面都可以,用segue的话:
        homeVC.performSegue(withIdentifier: "showThirdPageSegue", sender: nil)
        // 如果是手动初始化的话:
        // let thirdVC = ThirdViewController()
        // homeVC.present(thirdVC, animated: true)
    }
}

注意:需要提前在Storyboard中给主屏幕到第三个页面的segue设置标识符为showThirdPageSegue,不要给第二个页面到第三个页面加segue。

步骤3:验证内存释放逻辑

  • 第二个页面dismiss后会自动从内存中销毁,此时内存中仅保留主屏幕和第三个页面
  • 点击第三个页面的SignOut触发unwindSegue后,第三个页面会被自动销毁,内存中仅保留主屏幕,符合你的需求。
其他可选方案(基于导航控制器)

如果你的页面是嵌套在UINavigationController中,也可以直接修改导航栈的数组实现:
在跳转到第三个页面时,调用如下代码直接替换导航栈:

if let navVC = self.navigationController {
    let thirdVC = ThirdViewController()
    navVC.setViewControllers([navVC.viewControllers.first!, thirdVC], animated: true)
}

SignOut时直接调用popToRootViewController(animated: true)即可回到主屏幕,同时自动销毁第三个页面。

内容的提问来源于stack exchange,提问作者Resly34

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:15:04