SWIFTUI zwei Actionsheets irgendwie nicht möglich

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

Rabattcode für die heise MacDev 2020: Macoun20

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2020 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • SWIFTUI zwei Actionsheets irgendwie nicht möglich

    Hallo Forum-Mitglieder,

    ich probiere gerade etwas mit swiftui und stecke an einen Punkt fest. Ich möchte in einem Struct zwei Actionsheets die ich hintereinander anzeigen lassen kann. Der Code läßt sich kompilieren, aber es wird jetzt gar kein Actionsheet mehr angezeigt.




    Quellcode

    1. struct MainView: View {
    2. @EnvironmentObject var loginViewModel: LoginViewModel
    3. @State private var clouddienst_waehlen = false;
    4. @State private var clouddienst_waehlen2 = false;
    5. var body: some View {
    6. NavigationView {
    7. VStack {
    8. List(0 ..< 30) { item in
    9. Image(systemName: "photo")
    10. VStack(alignment: .leading) {
    11. Text("Apple Support")
    12. Text("Passwort für die App")
    13. .font(.subheadline)
    14. .foregroundColor(.secondary)
    15. }
    16. } .navigationBarTitle("Meine Passwörter")
    17. .navigationBarItems(leading:
    18. Button(action: {
    19. self.clouddienst_waehlen = true;
    20. }) {
    21. Text("Sperren")
    22. })
    23. } .onAppear() {
    24. }
    25. } .actionSheet(isPresented: self.$clouddienst_waehlen) {
    26. ActionSheet(
    27. title: Text("Herzlich Willkommen bei"),
    28. message: Text("Wie möchten Sie mit einer Datenbank verbinden?"),
    29. buttons: [
    30. .default(Text("Ich möchte einen neue Datenbank anlegen"),
    31. action: {
    32. print("KLICK")
    33. }),
    34. .default(Text("mit vorhandener Datenbank verbinden"),
    35. action: {
    36. print("funktioniert sheet 1")
    37. self.clouddienst_waehlen2 = true;
    38. })
    39. ])
    40. }
    41. .actionSheet(isPresented: self.$clouddienst_waehlen2) {
    42. ActionSheet(
    43. title: Text("Herzlich Willkommen"),
    44. message: Text("Wie möchten Sie mit einer Datenbank verbinden?"),
    45. buttons: [
    46. .default(Text("Ich möchte einen neue Datenbank anlegen"),
    47. action: {
    48. print("KLICK")
    49. }),
    50. .default(Text("mit vorhandener Datenbank verbinden"),
    51. action: {
    52. print("funktioniert sheet 2")
    53. })
    54. ])
    55. }
    56. }
    57. }
    Alles anzeigen
    Hat jemand ein ähnliches Problem mit einer Lösung ?

    Gruss

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von necromonger ()

  • necromonger schrieb:

    Ich möchte in einem Struct zwei Actionsheets die ich hintereinander anzeigen lassen kann.
    Das ist nach meinem Kenntnisstand nicht möglich. Eine Idee, die ich ausprobiert habe funktioniert auch nicht.

    necromonger schrieb:

    Der Code läßt sich kompilieren, aber es wird jetzt gar kein Actionsheet mehr angezeigt.
    Das ist auch logisch, denn mit jedem Aufruf von .actionSheet(isPresented:, content:) teilst du dem NavigationView mit, ob ein ActionView präsentiert werden soll oder nicht. Da beim zweiten Aufruf der Parameter isPresented nun mal false ist, wird daher gar kein ActionSheet präsentiert. Der letzte Aufruf entscheidet also.
  • nussratte schrieb:

    Sorry ich kann zum Thema nichts sagen
    Dann sag doch einfach nix.

    nussratte schrieb:

    aber WOW
    Wurde Swift nicht als super leicht zu lesen
    Zum einen ist das, wie matz schon schrieb, SwiftUI-Code. SwiftUI ist vorwiegend eine DSL.
    Zum anderen hat sich die Welt seit 2014 weiter gedreht. Leider hat meiner Meinung nach das OpenSource Entwicklungsmodell so einige negative Einflüsse gehabt, weil jeder seine persönlichen Vorlieben mit in die Sprache integriert haben möchte. Und Apple lässt da aus meiner Sicht zu viel zu.

    nussratte schrieb:

    und weniger Code verkauft von Apple.
    Na dann schreib noch mal die gleiche Funktionalität des Codes oben in Objective-C-Code. Dann zählen wir die Codezeilen mal zusammen.