SearchBar funktioniert nicht korrekt innerhalb einer Form{}

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • SearchBar funktioniert nicht korrekt innerhalb einer Form{}

    Hallo zusammen,
    zum Lernen sitze ich gerade an einer kleinen App, in der habe ich jetzt eine eigens zusammengestellte SearchBar integriert:

    Quellcode

    1. struct SearchBar: View {
    2. @Binding var searchText: String
    3. @Binding var isScannerPresented: Bool
    4. var placeholder: String
    5. var body: some View {
    6. HStack {
    7. TextField(placeholder, text: $searchText)
    8. .padding(.vertical, 10)
    9. .padding(.leading, 10)
    10. .overlay(
    11. HStack {
    12. Spacer()
    13. if !searchText.isEmpty {
    14. Button(action: {
    15. searchText = ""
    16. }) {
    17. Image(systemName: "multiply.circle.fill")
    18. .foregroundColor(.gray)
    19. .padding(.trailing, 10)
    20. }
    21. }
    22. }
    23. )
    24. Button(action: {
    25. isScannerPresented = true
    26. }) {
    27. Image(systemName: "barcode")
    28. .padding(10)
    29. .foregroundColor(.yellow)
    30. .cornerRadius(8)
    31. }
    32. .sheet(isPresented: $isScannerPresented) {
    33. BarCodeScanner(isbn: Binding($searchText), foundBooks: .constant(nil))
    34. }
    35. }
    36. .background(Color.secondary.opacity(0.1))
    37. .cornerRadius(10)
    38. .padding(.horizontal)
    39. }
    40. }
    Alles anzeigen
    Die Searchbar hat einen Button zum Aufrufen eines Scanners, sowie einen Clear Button sobald etwas im TextField geschrieben wurde. Das funktioniert soweit auch alles fein. Doch wenn ich die Searchbar innerhalb einer Form{} platziere, öffnet sich jedes mal der Scanner zusammen mit dem Clear Button. Kann mir da jemand weiterhelfen woran das liegt?
  • Es sieht so aus, als ob das Problem mit der Verwendung des sheet-Modifiers zusammen mit der Form-Ansicht in SwiftUI zusammenhängt. Die Form-Ansicht kann sich anders verhalten als erwartet, wenn sie mit Blättern (Sheets) kombiniert wird.
    Um dieses Problem zu umgehen, könntest du versuchen, die sheet-Modifikation außerhalb der Form-Ansicht zu platzieren oder stattdessen NavigationLink zu verwenden.

    Hier wird die sheet-Modifikation außerhalb der Form-Ansicht platziert und es wird NavigationView verwendet. Dadurch wird das Verhalten möglicherweise verbessert. Beachte, dass dies eine allgemeine Lösung ist, und es ist möglich, dass weitere Anpassungen erforderlich sind, abhängig von der Struktur deiner Ansichten.

    Quellcode

    1. import SwiftUI
    2. struct ContentView: View {
    3. @State private var searchText = ""
    4. @State private var isScannerPresented = false
    5. var body: some View {
    6. NavigationView {
    7. Form {
    8. Section {
    9. SearchBar(searchText: $searchText, isScannerPresented: $isScannerPresented, placeholder: "Search")
    10. }
    11. // Weitere Sektionen oder Ansichten hier hinzufügen
    12. }
    13. .navigationBarTitle("Search Example")
    14. .sheet(isPresented: $isScannerPresented) {
    15. BarCodeScanner(isbn: Binding($searchText), foundBooks: .constant(nil))
    16. }
    17. }
    18. }
    19. }
    20. // Hier sollte die Definition der SearchBar und anderer benutzerdefinierter Ansichten erfolgen
    21. struct ContentView_Previews: PreviewProvider {
    22. static var previews: some View {
    23. ContentView()
    24. }
    25. }
    Alles anzeigen