提问人:user3748400 提问时间:11/15/2023 最后编辑:user3748400 更新时间:11/16/2023 访问量:48
为什么 Picker onTap 和 onChange 不能协同工作?
Why doesn't Picker onTap and onChange work together?
问:
我有一个选择器(分段)。我需要onTap和onChange。onTap 有效,但 onChange 不起作用。如果我删除 tap,则只有 onChange 代码有效。
我需要两者,因为我正在预填充question.answer onAppear,因此在预填充时会触发onChange。我需要知道用户何时点击分段控件。
代码是这样的:
Picker("", selection: question.answer) {
ForEach(yesNoOptions, id: \.self) {
Text($0)
}
}
.onTapGesture(perform: {
//do something
})
.onChange(of: question.answer.wrappedValue, perform: { newValue in
// do something
})
.pickerStyle(.segmented)
答:
0赞
JanMensch
11/15/2023
#1
您需要为分段选取器中的每个选项分配 a。否则,SwiftUI 将不知道选取器中的哪个选项对应于哪个值,因此将无法更新选择值。
为此,只需将修饰符添加到选取器中的文本视图,如下所示:tag
.tag(...)
Picker("", selection: question.answer) {
ForEach(yesNoOptions, id: \.self) {
Text($0)
.tag($0) // <--- indicates which value this picker option relates to
}
}
根据您使用的数据类型,您可能还需要使其符合 ,否则将出现编译器错误。answer
Hashable
评论
0赞
user3748400
11/16/2023
你能请好吗?我需要如何在第一次点击选择器段时发出警报。但我需要 onChange 来更新选定的答案。我不确定标签将如何提供帮助。
0赞
JanMensch
11/16/2023
问问自己,如果用户通过选取器进行选择,选取器实际上如何知道要存储什么值?SwiftUI 只能看到“文本”视图。您需要告诉它每个选择选项所引用的值。为此,您使用 .一旦你有了它,SwiftUI 就会看到“啊,用户选择了那个视图,它与该值相关,所以我会取该值并将其存储在答案中”。然后,随着答案值的变化,您将在 中得到一个事件。Text($0)
question.answer
.tag()
onChange()
评论
isPrefilling
onAppear
onChange
isPrefilling
true