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

Swift UIKit如何通过代码跳转至启动首页且不显示返回按钮

实现方案

核心逻辑是直接替换当前应用窗口的根控制器,会完全清空所有已存在的控制器栈,效果和用户首次打开应用完全一致,不会存在页面叠加、显示返回按钮的问题。

前置准备

打开你的主Storyboard,确认你的底部导航栏(UITabBarController)是标记为初始视图控制器的(Storyboard中控制器左侧有指向的箭头),如果你的首页根控制器不是初始控制器,可以给对应控制器设置Storyboard ID备用。

按钮点击代码实现

@IBAction func backToHomeAction(_ sender: UIButton) {
    // 替换为你实际的主Storyboard文件名
    let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
    // 实例化根控制器,如果不用初始控制器,替换为instantiateViewController(withIdentifier: "你的控制器ID")
    guard let rootTabBarVC = mainStoryboard.instantiateInitialViewController() else {
        return
    }
    
    // 适配不同iOS版本获取window
    let targetWindow: UIWindow?
    if #available(iOS 13.0, *) {
        targetWindow = UIApplication.shared.connectedScenes
            .filter({ $0.activationState == .foregroundActive })
            .first(where: { $0 is UIWindowScene })
            .flatMap({ $0 as? UIWindowScene })?.windows
            .first(where: \.isKeyWindow)
    } else {
        targetWindow = UIApplication.shared.keyWindow
    }
    
    guard let window = targetWindow else { return }
    window.rootViewController = rootTabBarVC
    // 可选:添加淡入过渡动画,避免切换生硬
    UIView.transition(with: window, duration: 0.25, options: .transitionCrossDissolve, animations: nil)
}

补充说明

  • 如果需要跳转后默认选中底部导航栏的指定tab,可以在实例化rootTabBarVC后添加代码:
    (rootTabBarVC as? UITabBarController)?.selectedIndex = 0 // 0对应第一个tab,按需修改索引即可
    
  • 该方案会销毁当前所有已经打开的页面,如果需要保留部分页面状态,建议提前在合适的时机做持久化存储

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 05:54:01