我有一个 SwiftUI Picker
,我想在用户滚动列表时根据它的值更新另一个 View 。通过将 @Binding
传递给选择器,我可以在用户停在所选项目上时进行更新...但我无法找到在列表滚动时触发的事件。
使用旧的 UIPickerView
,您可以使用 titleForRow
挂接到此 as mentioned in this answer .我正在寻找适用于 SwiftUI 的 Picker
的类似内容。
这是一个非常简单的 SwiftUI 片段,它演示了我试图找到解决方法的默认行为的问题:
import SwiftUI
struct ContentView: View {
@State var selected:Int = 0
var toDisplay:String {
get {
return "Selected: \(selected)"
}
}
var body: some View {
return VStack {
Text(toDisplay)
Form {
Section{
Picker(selection: $selected, label: Text("")) {
ForEach(0..<100) {
Text("Item \($0)").tag($0)
}
}
.pickerStyle(WheelPickerStyle())
.frame(width: 350, height: 250, alignment: .center)
}
}
}
}
}
#if DEBUG
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
如果运行它,您会看到顶部的 Selected: #
文本在选择器完全停止之前不会更新:
最佳答案
如果您正在寻找一种仅使用 SwiftUI 的 Picker
来实现此目的的方法,那么我相信您不走运。由于 SwiftUI 的设计方式,您实际上无法像使用 UIKit 那样访问这些 View 的底层功能。如果您认为将 titleForRow
与 UIPickerView
一起使用是一个可行的解决方案,那么您最好的选择是使用 UIViewRepresentable
来移植 UIPickerView
与 SwiftUI 一起使用。
关于swift - 在 Swiftui Picker 滚动列表时触发的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57485229/