SwiftUI 中的选取器委托滚动方法

Posted

技术标签:

【中文标题】SwiftUI 中的选取器委托滚动方法【英文标题】:Picker delegate scrolling method in SwiftUI 【发布时间】: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>

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

【问题讨论】:

【参考方案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)
                
            
        
    

【讨论】:

以上是关于SwiftUI 中的选取器委托滚动方法的主要内容,如果未能解决你的问题,请参考以下文章

如何正确处理更新视图中的选取器(SwiftUI)

SwiftUI:选取器不会更新同一视图中的文本

SwiftUI:将选取器选择设置为动态数组中的最后一个

SwiftUI 2 .onChange() 中的选取器不会更改 UINavigationBar.appearance()

SwiftUI 表单中的选取器在选择一个值后变为灰色

SwiftUI:列表项跳转到选取器表单中的标题