SwiftUI 分段选择器默认状态为 nil

Posted

技术标签:

【中文标题】SwiftUI 分段选择器默认状态为 nil【英文标题】:SwiftUI segmented picker default state as nil 【发布时间】:2020-08-21 08:01:13 【问题描述】:

我在表单中使用分段选择器来回答简单的“是”和“否”问题。分段选择器初始状态是否可以设置为 nil,以便在出现时既不突出显示/选择是或否?

@State private var equipmentCheck = 0
private var answers = ["Yes", "No"]

var body: some View 
    NavigationView 
        Form 
            Section(header: Text("Questions")) 
                Text("Have the plant and equipment been checked?")
                Picker("", selection: $equipmentCheck) 
                    ForEach(0 ..< answers.count, id: \.self) 
                        Text("\(self.answers[$0])")
                    
                
                .pickerStyle(SegmentedPickerStyle())
                .padding()
            
        
    

【问题讨论】:

我对@9​​87654322@ 没有太多经验,但我看到您正在自己设置选择器的标签。为什么不根据equipmentCheck 自定义ForEach 块中的Text。现在,您必须记住,Picker 现在有三个统计信息 - none, yes , no 【参考方案1】:

这是一种可能的方法。使用 Xcode 11.4 / ios 13.4 测试和使用

@State private var equipmentCheck: Int?        // << here !!
private var answers = ["Yes", "No"]

var body: some View 
    NavigationView 
        Form 
            Section(header: Text("Questions")) 
                Text("Have the plant and equipment been checked?")
                Picker("", selection: $equipmentCheck) 
                    ForEach(0 ..< answers.count, id: \.self) 
                        Text("\(self.answers[$0])")
                           .tag(Optional($0))           // << here !!
                    
                
                .pickerStyle(SegmentedPickerStyle())
                .padding()
            
        
    

【讨论】:

这似乎依赖于相同的机制,即不匹配任何标签的选择将显示未选择的界面。您是否知道任何说明这是官方行为的文档?【参考方案2】:

似乎如果您将所选值设置为不在分段控件中的索引,则不会突出显示任何值。

例如:

@State private var equipmentCheck = -1

有效。

我正在寻找确认这可以保证工作的文档,但没有找到。

UIKit 的 UISegmentedControlselectedSegmentIndex 的文档说将值设置为 -1 以删除选择,所以在这里这样做似乎也是合理的。

【讨论】:

以上是关于SwiftUI 分段选择器默认状态为 nil的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 动态分段选取器过滤器

无法在 swift ui 中单击分段选择器

在 SwiftUI 中使用分段式选择器在两个页面之间滑动

如何在 SwiftUI 中更改分段选取器的颜色外观?

SwiftUI 选择器 调用中位置 #1、#2、#3 的额外参数

如何增加 SwiftUI 选择器中显示的最大行数?