Programmatisches Navigation zu neuer View

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

  • Programmatisches Navigation zu neuer View

    Hallo,

    ich möchte gerne zu einer anderen SwiftUI View navigieren, nach dem ein Textfield submitted wurde und stehe gerade total auf dem Schlauch was ich tuen muss.

    Quellcode

    1. @State var unauthorized:Bool = false
    2. @State var authenticated:Bool = false
    3. var body: some View {
    4. NavigationStack {
    5. Text(LocalizedStringKey("cardAuthText"))
    6. SecureField("TokenID", text: $idCard)
    7. .onAppear() {
    8. isFocused = true
    9. }
    10. .onSubmit {
    11. let p:Person = getPersonData(tokenid: idCard)
    12. if p.id != 0 {
    13. authenticated = true
    14. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    15. ->NAVIGATE HERE TO OTHER VIEW!<-
    16. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    17. } else {
    18. idCard = ""
    19. isFocused = true
    20. unauthorized = true
    21. authorized = false
    22. }
    23. }
    24. Text(unauthorized ? LocalizedStringKey("unauthorizedCardText") : "")
    25. }
    26. }.frame(maxWidth: .infinity, maxHeight: .infinity)
    27. }
    28. }
    29. }
    30. .navigationViewStyle(StackNavigationViewStyle())
    Alles anzeigen

    Kann mir jemand mal einen Schubs geben? ;)

    Danke!
  • Huhu,

    du könntest zum Beispiel mit einem Switch arbeiten.
    Dann müsstest du bei dem .onSubmit nur deine Variable mit toggleToNewView.toggle() auf true setzen

    Quellcode

    1. @State var toggleToNewView : Bool = false
    2. var body: some View {
    3. if !toggleToNewView {
    4. NavigationStack{
    5. /*so wie bisher bei dir */
    6. }
    7. } else if toggleToNewView{
    8. NewViewAppeared(...)
    9. ...
    10. }
    11. }
    Alles anzeigen
  • Qvex23 schrieb:

    Danke! Die Lösung ist super! War irgendwie bei einem eigenem neuen File mit der neuen View drin, aber deine Lösung geht natürlich auch!

    Mal schauen ob das auf Dauer auch so taugt. Wenn so eine View groß wird, wirds auch unübersichtlich im Code.
    Das ist richtig, man muss schauen wie viele Views du darüber ansteuern willst.

    Eine Überlegung die mir dabei noch kommt wäre vielleicht mit einem Switch - statement zu arbeiten und dann eine "wähl-variable" zu haben.. Ob das funktioniert weiß ich jetzt so ad hoc nicht, da es mir immer gereicht hat mit einem einzelnen Toggle eine View weiter zu springen.

    Aber einen Versuch wäre es wert, falls du da xx Views ansteuern solltest :)
    Würde dann ungefähr so aussehen..

    Quellcode

    1. @State var switchCase : Int = 0 (oder String um zu der View zu navigieren ist etwas einfacher zu lesen)
    2. var body: some View {
    3. switch(switchCase){
    4. case 0:
    5. //gehe zu view 1
    6. case 1:
    7. //gehe zu view 2
    8. case 2:
    9. //gehe zu view 3
    10. default:
    11. //gehe zu view 0
    12. }
    13. }
    Alles anzeigen
  • Schau Dir mal NavigationDestination an. Da setzt Du einfach eine Enum mit der gewünschten View und fertig. Ist zwar ab iOS16, aber da sind die anderen Konstrukte mit isActive dann auch veraltet. Da du aber in deinen Beispiel NavigationStack verwendet hast, den es erst seit iOS 16 gibt, sollte das kein Problem darstellen. Im übrigen, zu NavigationStack, ist den NavigationViewStyle auch veraltet.