【发布时间】:2020-03-31 13:00:36
【问题描述】:
我创建了一个显示弹出框的自定义按钮。这是我的代码:
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)
}
}
}
}
弹出文本
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
...
}
【问题讨论】:
-
您是否研究过视图构建器?
标签: swiftui