swift - SwiftUI 中的 Picker 委托(delegate)滚动方法

标签 swift uipickerview swiftui

我的 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 发生的变化,但我不确定如何,也无法在 WKInterfacePicker 的文档中找到任何内容或只是 选择器

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

最佳答案

如果它是关于最后一个值,您可以使用 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)
                }
            }
        }
    }
}

关于swift - SwiftUI 中的 Picker 委托(delegate)滚动方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58218264/

相关文章:

swift - ' fatal error : index out of range' when deleting bound object in view

用于反向地理编码的 Swift 完成处理程序

iphone - 像 UITableView 一样的 UIPickerView 索引?

ios - SwiftUI/MapKit 注解选择和导航

datepicker - 修复来自 DatePicker 的数百行警告重新布局约束

iphone - 如何创建 3 组件 UIPickerView(模板任何人???)iPhone

SwiftyStoreKit。如何在不输入密码的情况下验证订阅?

swift - UIViewController 作为另一个 UIViewController 的子类

swift - 减慢 didReceiveMemoryWarning() 中的进程

objective-c - 如何将 PickerView 委托(delegate)从一个 Controller 更改为另一个 Controller ?