diff --git a/ios/Sources/ItemViews.swift b/ios/Sources/ItemViews.swift index ce6721c..e8c77be 100644 --- a/ios/Sources/ItemViews.swift +++ b/ios/Sources/ItemViews.swift @@ -868,7 +868,9 @@ struct ItemAddSheet: View { @State private var locScanShown = false /// Frisch angelegtes Stueck, dessen Tag gleich beschrieben werden soll. @State private var nfcItem: Item? - /// Ob nach dem Tag-Blatt bis zur Liste geschlossen wird („Anlegen & fertig"). + /// Loest den Schub zum Tag-Schritt aus (navigationDestination, iOS 16). + @State private var nfcPush = false + /// Ob nach dem Tag-Schritt bis zur Liste geschlossen wird („Anlegen & fertig"). @State private var nfcFinish = false var body: some View { @@ -966,13 +968,18 @@ struct ItemAddSheet: View { locations = (try? await APIClient.shared.locations()) ?? [] shops = (try? await APIClient.shared.shops()) ?? [] } - // Blatt auf Blatt: Das Anlege-Blatt bleibt stehen, bis der Tag - // geschrieben (oder uebersprungen) ist. Erst sein Verschwinden schliesst - // beide - das ist die Reihenfolge, die SwiftUI vertraegt. - .sheet(item: $nfcItem, onDismiss: { - if nfcFinish, let onFinish { onFinish() } else { dismiss() } - }) { stueck in - NavigationStack { NFCSchreibenView(item: stueck) } + // GESCHOBEN und nicht als zweites Blatt aufgelegt. Ein Blatt aus einem + // Blatt heraus ist hier gleich dreifach riskant: Dieses Formular traegt + // schon ein fullScreenCover (Lagerort scannen), und es wird selbst aus + // einer Section heraus gezeigt - wovor ProductDetailView:349 und + // ItemViews:775 jeweils aus eigener Erfahrung warnen. Ein Schub in den + // ohnehin vorhandenen NavigationStack umgeht alle drei Fallen. + .navigationDestination(isPresented: $nfcPush) { + if let stueck = nfcItem { + NFCSchreibenView(item: stueck, onFertig: { + if nfcFinish, let onFinish { onFinish() } else { dismiss() } + }) + } } } @@ -1035,7 +1042,8 @@ struct ItemAddSheet: View { if created.count == 1, NFCDienst.verfuegbar { nfcFinish = finish nfcItem = created[0] - return // Schliessen uebernimmt das onDismiss des Tag-Blatts + nfcPush = true + return // Schliessen uebernimmt „Fertig" im Tag-Schritt } if finish, let onFinish { onFinish() } else { dismiss() } } catch { self.error = error.localizedDescription } diff --git a/ios/Sources/NFCViews.swift b/ios/Sources/NFCViews.swift index 8157c2a..11d42d9 100644 --- a/ios/Sources/NFCViews.swift +++ b/ios/Sources/NFCViews.swift @@ -7,6 +7,11 @@ import SwiftUI /// steht – `vorrania://i/`. struct NFCSchreibenView: View { let item: Item + /// Was „Fertig" tun soll. Ohne Angabe schliesst die Ansicht sich selbst – + /// das ist der Fall, wenn sie aus der Stueck-Bearbeitung heraus aufgerufen + /// wird. Haengt sie als Schritt an einem Ablauf (gleich nach dem Anlegen), + /// muss stattdessen der ganze Ablauf enden. + var onFertig: (() -> Void)? = nil @Environment(\.dismiss) private var dismiss @@ -62,7 +67,11 @@ struct NFCSchreibenView: View { } .navigationTitle("NFC-Tag") .navigationBarTitleDisplayMode(.inline) - .toolbar { ToolbarItem(placement: .topBarLeading) { Button("Fertig") { dismiss() } } } + .toolbar { + ToolbarItem(placement: .topBarLeading) { + Button("Fertig") { if let onFertig { onFertig() } else { dismiss() } } + } + } } private func schreiben() async {