Пользовательский модификатор событий в SwiftUI - PullRequest
0 голосов
/ 31 марта 2020

Я создал пользовательскую кнопку, которая показывает поповер. Вот мой код:

PopupPicker

struct PopupPicker: View {

    @State var selectedRow: UUID?
    @State private var showPopover = false
    let elements: [PopupElement]

    var body: some View {
        Button((selectedRow != nil) ? (elements.first { $0.id == selectedRow! }!.text) : elements[0].text) {
            self.showPopover = true
        }
        .popover(isPresented: self.$showPopover) {
            PopupSelectionView(elements: self.elements, selectedRow: self.$selectedRow)
        }
    }
}

PopupSelectionView

struct PopupSelectionView: View {

    var elements: [PopupElement]
    @Binding var selectedRow: UUID?

    var body: some View {
        List {
            ForEach(self.elements) { element in
                PopupText(element: element, selectedRow: self.$selectedRow)
            }
        }
    }

}

PopupText

struct PopupText: View {

    var element: PopupElement
    @Binding var selectedRow: UUID?

    var body: some View {
        Button(element.text) {
            self.presentation.wrappedValue.dismiss()
            self.selectedRow = self.element.id
        }
    }
}

Это отлично работает, но я могу создать собственный модификатор события, чтобы написать:

PopupPicker(...)
    .onSelection { popupElement in
        ...
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...