我有一个SwiftUI Picker
,我想在用户滚动列表时根据其值更新另一个视图。通过将@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: #
文本才会更新:
答案 0 :(得分:1)
如果您正在寻找一种仅使用SwiftUI的Picker
来实现这一目标的方法,那么我相信您很不幸。由于SwiftUI的设计方式,您确实无法像使用UIKit一样访问这些视图的基础功能。如果您认为将titleForRow
与UIPickerView
结合使用是可行的解决方案,那么最好的选择是使用UIViewRepresentable
来移植UIPickerView
以便与SwiftUI一起使用。>