Метод прокрутки делегата выбора в SwiftUI - PullRequest
1 голос
/ 03 октября 2019

У меня есть простой Picker объект в моей иерархии SwiftUI:

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

Я использую прокручиваемый инструмент выбора в приложении WatchOS, и он прекрасно работает. Я даже получаю возможность вращения цифровой короны бесплатно.

Что я хочу сделать, это определить, когда прокрутка началась и особенно закончилась (чтобы получить последнее выбранное значение, выполнить и выполнить действие). с ним)

Я полагаю, что мне нужно реализовать метод делегата, чтобы читать изменения, происходящие в средстве выбора, но я не уверен, как, и я не могу найти ничего в документации для WKInterfacePickerили просто Picker

Есть предложения о том, как определить начало и конец события прокрутки?

1 Ответ

0 голосов
/ 03 октября 2019

Если это последнее значение, вы можете использовать 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)
                }
            }
        }
    }
}
...