在 SwiftUI 的 Picker 中添加新元素
Posted
技术标签:
【中文标题】在 SwiftUI 的 Picker 中添加新元素【英文标题】:Add new Element in Picker in SwiftUI 【发布时间】:2019-09-17 05:22:24 【问题描述】:我找不到如何在 SwiftUI 的选取器视图中添加一些元素,在我的示例中,我想在单击按钮时在选取器中添加“Z”值。
struct ContentView: View
@State var values: [String] = ["A", "B", "C"]
@State private var selectedValue = 0
var body: some View
NavigationView
Form
Section
Picker(selection: $selectedValue, label: Text("Value"))
ForEach(0 ..< values.count)
Text(self.values[$0])
Button(action:
self.values.append("Z")
, label:
Text("Add")
)
.navigationBarTitle("Select a value")
当我点击按钮时,Z 被添加到“values”数组中,但 Picker 没有刷新。
谢谢你:)
【问题讨论】:
【参考方案1】:您必须通过 id
识别 SwiftUI 的值,以使其更改可检测:
ForEach(0 ..< self.values.count, id: \.self)
Text(self.values[$0])
这样 SwiftIU 知道它应该在更改时重建选择器。
提示:您可以像这样直接使用元素:
ForEach(values, id: \.self)
Text($0)
不要忘记更改 selectedValue
类型和值以匹配您按照上述提示操作的数据源 IF:
@State private var selectedValue = "A"
【讨论】:
我试过你的提示,但 selectedValue 没有更新? 那么你应该改变selectedValue
的类型和值来匹配数据源。答案已更新。
啊哈,这是逻辑,谢谢。【参考方案2】:
将 selectedValue 从 int 更改为 String
@State private var selectedValue = "A"
添加参数id和标签修饰符
Picker(selection: $selectedValue, label: Text("Value"))
ForEach(values, id: \.self)
Text($0).tag(String($0))
【讨论】:
以上是关于在 SwiftUI 的 Picker 中添加新元素的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI Segmented Picker 元素为灰色且禁用
如何在没有额外空间的情况下更改 SwiftUI Picker 视图大小?
SwiftUI Picker 在同一视图中更改第二个状态变量