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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:45:07