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
相关产品推荐
相关产品推荐

