Это то, что у меня есть, чтобы представить подтверждение, что нажимает: < /p>
extension View {
func confirmDeletion(isPresented: Binding, title: String? = nil, action: @escaping ()-> Void) -> some View {
confirmationDialog("", isPresented: isPresented) {
Button("delete", role: .destructive) { action() }
} message: {
Text(title)
}
}
}
И это работает отлично, но теперь мне нужно определить и назвать его базой на выбранном элементе из списка, а не только по переключению , поэтому я просто определил его так:
extension View {
// here is previous declaration
func confirmDeletion(item: Binding, title: String? = nil, action: @escaping (Item)-> Void) -> some View {
let binding = Binding {
item.wrappedValue != nil
} set: { _ in }
return confirmDeletion(isPresented: binding, title: title) { // call the previous declaration with overriden action
if let item = item.wrappedValue {
action(item)
}
}
}
}
< /code>
Но проблема в том, что он отображается только один раз. Когда я нажимаю на один и тот же PlanelementView в ряду, он не представляет диалог во второй раз. Почему? Когда я нажимаю на разные PlanelementView он работает.@State var selectedPlanForDeletion: Plan?
var body: some View {
VStack {
ForEach(plans) { plan in
PlanElementView(plan: plan)
.onTapGesture {
selectedPlanForDeletion = plan
}
}
}
.confirmDeletion(
item: $selectedPlanForDeletion,
title: "newTitle"
) { plan in
print(plan)
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... sented-one