swift - 在 Swiftui Picker 滚动列表时触发的事件

标签 swift uipickerview swiftui picker

我有一个 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: # 文本在选择器完全停止之前不会更新:

picker delay

最佳答案

如果您正在寻找一种仅使用 SwiftUI 的 Picker 来实现此目的的方法,那么我相信您不走运。由于 SwiftUI 的设计方式,您实际上无法像使用 UIKit 那样访问这些 View 的底层功能。如果您认为将 titleForRowUIPickerView 一起使用是一个可行的解决方案,那么您最好的选择是使用 UIViewRepresentable 来移植 UIPickerView 与 SwiftUI 一起使用。

关于swift - 在 Swiftui Picker 滚动列表时触发的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57485229/

相关文章:

ios - Firebase 和 Swift - 延迟 ViewController 的更改,直到读取数据

ios - 使用 Core Graphics 制作饼图

ios - 找不到匹配的配置文件(有效的配置文件均不允许指定的权利)

ios - 如何在tableviewController的单元格中添加选项卡

ios - 如何禁用 UIPickerView (Swift)?

ios - 如何在 SwiftUI 中使用 TabbedView?

swift - 为什么我的 UIPickerview 无法在 UIAlertcontroller 中工作?

objective-c - 在 3 个 UIPickers 的 uitextfield 中输入分数?

SwiftUI Nested ForEach 导致意外排序

ios - 在 ObservableObject 中导入变量