Swift UIKit 如何设置欢迎页仅在单设备首次启动时展示一次
解决方案(Swift UIKit)
要实现欢迎页仅首次展示,只需通过系统的UserDefaults持久化存储一个「是否已展示过欢迎页」的标记位,APP启动时根据标记决定加载的根控制器即可。
1. 定义全局的存储标记
避免硬编码出错,建议定义一个全局常量:
let kHasShownWelcomePageKey = "hasShownWelcomePage"
2. 启动时判断初始根控制器
iOS 13及以上版本在SceneDelegate中处理:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return } let window = UIWindow(windowScene: windowScene) self.window = window // 读取标记判断是否展示过欢迎页 let hasShown = UserDefaults.standard.bool(forKey: kHasShownWelcomePageKey) if hasShown { // 已经展示过,直接加载主页 window.rootViewController = MainViewController() // 替换为你自己的主页控制器 } else { // 首次启动,加载欢迎页 window.rootViewController = WelcomeViewController() // 替换为你自己的欢迎页控制器 } window.makeKeyAndVisible() }
如果是iOS13以下的老项目,在AppDelegate的didFinishLaunchingWithOptions方法中做同样的逻辑判断即可。
3. 欢迎页点击「立即开启」后更新标记并切换页面
在欢迎页的按钮点击回调中实现如下逻辑:
@IBAction func startButtonTapped(_ sender: UIButton) { // 更新标记,标记为已展示欢迎页 UserDefaults.standard.set(true, forKey: kHasShownWelcomePageKey) UserDefaults.standard.synchronize() // iOS12+后系统会自动同步,加了更保险 // 切换根控制器为主页,加过渡动画更顺滑 guard let window = UIApplication.shared.windows.first else { return } let mainVC = MainViewController() // 替换为你自己的主页控制器 UIView.transition(with: window, duration: 0.3, options: .transitionCrossDissolve) { window.rootViewController = mainVC } }
补充说明
- 如果后续APP发布大版本需要重新展示新版欢迎页,可以把存储key修改为带版本号的格式,比如
kHasShownWelcomePageKey_v2,即可实现新版本用户重新触发一次欢迎页展示。 - 该方案的存储是设备本地持久化的,只要用户不卸载APP或手动清理应用存储数据,标记就会一直生效,符合单设备仅首次展示的需求。

内容的提问来源于stack exchange,提问作者Asr
相关产品推荐
相关产品推荐

