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

SwiftUI自定义Segment Picker状态持久化:设置默认选中项

解决Segment Picker重启后默认选中指定分段的问题

你的核心需求是:App运行期间切换视图时,保持Segment Picker的选中状态;但App完全关闭重启后,自动选中默认的分段(索引1)。当前代码的问题在于,冷启动时会读取UserDefaults中保存的上次选中索引,导致无法回到默认值。

解决方案

通过在App启动时重置UserDefaults中的选中索引为默认值,同时保留视图切换时的状态保存逻辑,即可实现需求:

  1. 修改App入口文件(比如YourApp.swift),在冷启动时重置默认选中索引:
@main
struct YourApp: App {
    init() {
        // 每次App冷启动时,将选中索引重置为默认值1
        UserDefaults.standard.set(1, forKey: "sIndex")
    }
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
  1. 简化ContentView代码,保留视图切换时的状态读取和保存逻辑:
struct ContentView: View {
    @State private var selSegmentIndex: Int = 1
    
    init() {
        // 读取UserDefaults中的状态,用于视图间切换时维持选中状态
        if let savedSIndex = UserDefaults.standard.value(forKey: "sIndex") as? Int {
            self.selSegmentIndex = savedSIndex
        }
    }
    
    var body: some View {
        CustomPicker(index: $selSegmentIndex)
            .onDisappear {
                // 视图消失时保存当前选中状态,供其他视图返回时读取
                UserDefaults.standard.set(selSegmentIndex, forKey: "sIndex")
            }
    }
}

逻辑说明

  • 冷启动时,App的init方法会先将UserDefaults中的sIndex重置为1,ContentView初始化时读取该值,默认选中分段1。
  • 运行期间切换分段后,视图消失时会将当前选中索引保存到UserDefaults,从其他视图返回时,ContentView会读取保存的值,维持之前的选中状态。
  • 每次App关闭重启,都会重复冷启动的重置逻辑,确保默认选中分段1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:06:02