【问题标题】:Picker delegate scrolling method in SwiftUISwiftUI 中的选取器委托滚动方法
【发布时间】:2019-10-03 11:31:26
【问题描述】:

我的 SwiftUI 层次结构中有简单的 Picker 对象:

Picker(selection: $pickerSelection, label: Text("Select your item")) {
    ForEach(0 ..< items.count) {
        Text("\(self.items[$0].valueCode)")
            .tag($0)
    }
}

我在 WatchOS 应用程序中使用了一个可滚动的选取器,它工作得很好。我什至可以免费获得 Digital Crown 旋转功能。

我想要做的是检测滚动开始和特别是结束的时间(以获取最后选择的值并执行和操作)

我想我需要实现某种 Delegate 方法来读取 Picker 发生的变化,但我不确定如何,也无法在 WKInterfacePickerPicker 的文档中找到任何内容/p>

关于如何检测滚动事件的开始和结束有什么建议吗?

【问题讨论】:

    标签: swift uipickerview swiftui


    【解决方案1】:

    如果它是最后一个值,您可以使用 Combine 并订阅 pickerSelection。

    class ViewModel: ObservableObject {
        private var disposables = Set<AnyCancellable>()
        @Published var pickerSelection = 0
        
        init() {
            let cc = $pickerSelection
                .sink(receiveValue: { value in
                    print(value)
                })
            cc.store(in: &disposables)
        }
        
    }
    
    struct ContentView: View {
        
        @ObservedObject var mm = ViewModel()
        
        var items = [1,2,3,4,5,6,7,8,9,10]
        
        var body: some View {
            
            VStack {
                Text("Hello, World!")
                Picker(selection: self.$mm.pickerSelection, label: Text("Item:")) {
                    ForEach(0 ..< items.count) {
                        Text("Item \($0)")
                            .tag($0)
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多