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

Posted

技术标签:

【中文标题】SwiftUI - 动态分段选取器过滤器【英文标题】:SwiftUI - Dynamic segmented Picker Filter 【发布时间】:2020-11-26 00:12:19 【问题描述】:

我正在尝试构建一个具有分段样式的动态选择器,该样式会根据用户输入重新呈现自身。

也就是说,每次用户向filterValues 数组添加值时,分段选择器都应该重新渲染。

这是我尝试过但没有工作的:

struct ContentView: View 
   @State private var items = [Item]()
   @State private var filterValueIndex = 0
   @State private var filterValues: [Int] = [1, 2, 3, 5]

   var body: some View 
       Picker("Filter", selection: $filterValueIndex) 
            ForEach(0 ..< filterValues.count) 
                Text("\(filterValues[$0])")
            
        
       .pickerStyle(SegmentedPickerStyle())
   

【问题讨论】:

【参考方案1】:

我们需要使用动态ForEach,如下所示(使用 Xcode 12.1 / ios 14.1 测试)

    Picker("Filter", selection: $filterValueIndex) 
            ForEach(filterValues.indices, id: \.self)     // << here !!
                 Text("\(filterValues[$0])")
            
      
    .pickerStyle(SegmentedPickerStyle())

【讨论】:

以上是关于SwiftUI - 动态分段选取器过滤器的主要内容,如果未能解决你的问题,请参考以下文章

onTapGesture 禁用我的选取器和分段点击

SwiftUI:将选取器选择设置为动态数组中的最后一个

SwiftUI 中的动态过滤器(谓词)

SwiftUI:如何将 CoreData 与动态过滤器相加?

浅谈SwiftUI 3.0新加入的CoreData动态FetchRequest过滤与排序特性

jQurey-过滤选择器