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

Swift中如何让SplashViewController的GreetingLabel按启动次数显示不同内容?

实现iOS启动页首次/后续启动显示不同问候语的方案

直接把UserDefaults的判断逻辑移到SplashViewController里即可,这样能直接操作greetingLabel,具体修改步骤如下:

1. 简化SceneDelegate代码

把原来SceneDelegate里的判断逻辑删掉,只保留基础的窗口初始化代码:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let _ = (scene as? UIWindowScene) else { return }
    }
}

2. 修改SplashViewController处理逻辑

在viewDidLoad方法里添加UserDefaults判断,根据是否首次启动设置Label文本,同时标记首次启动状态:

class SplashViewController: UIViewController {

    @IBOutlet weak var greetingLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 判断是否是首次启动
        let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
        if launchedBefore {
            greetingLabel.text = "Hello"
        } else {
            greetingLabel.text = "Welcome!"
            // 标记为已启动过
            UserDefaults.standard.set(true, forKey: "launchedBefore")
            // 立即同步(可选,确保下次启动能读取到)
            UserDefaults.standard.synchronize()
        }

        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) {
            self.performSegue(withIdentifier: "splashToMain", sender: nil)
        }
    }
}

补充说明

把UI相关的逻辑放在视图控制器里更合理,符合iOS开发的MVC职责划分——视图控制器负责自己的UI展示和数据绑定,避免在SceneDelegate这类生命周期代理中直接操作UI控件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:08:02