swiftUIで、ボタンを使用して画面に新しいビューを追加することは可能ですか?

ヘンリーハドソン

ボタンをタップするたびに、新しいcardViewを表示したいと思います。これがswiftUIで可能かどうか、もしそうなら、どのようなアクションを実行する必要があるのか​​疑問に思っています。いくつかのパラメーターをcardView構造体に渡すことができればさらに良いでしょうが、どんな助けでも素晴らしいでしょう!


struct ContentView: View {
    var body: some View {
        ZStack {
            VStack {
                TextButton(action: {print("Button tapped")}, text: "new card")
                CardView()
            }
        }
    }
}

struct CardView: View {
    var body: some View {
        ZStack {
            Rectangle()
                .fill(Color(#colorLiteral(red: 0.7450980544, green: 0.1568627506, blue: 0.07450980693, alpha: 1)))
                .frame(width: 100, height: 100 * 1.618)
                .cornerRadius(16)
                .shadow(color: Color(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)).opacity(0.1), radius: 1, x: 0, y: 1)
                .shadow(color: Color(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)).opacity(0.2), radius: 10, x: 0, y: 10)

            VStack {
                Text("Card")
                    .font(.system(size: 10) )
                    .foregroundColor(.white)
                    .bold()
            }
        }
    }
}


struct TextButton: View {
    let action: () -> Void
    let text: String

    var body: some View {
        Button(action: action, label: {
            Text(text)
                .padding(.horizontal, 16)
                .padding(.vertical, 16)
                .foregroundColor(.white)
                .background(Color.blue)
                .cornerRadius(.infinity)
                .shadow(color: Color(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)).opacity(0.1), radius: 1, x: 0, y: 1)
                .shadow(color: Color(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)).opacity(0.2), radius: 10, x: 0, y: 10)
        })
    }
}
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
} ```
新しい開発者

SwiftUIでは、ビューは状態データを反映するため、ビューを直接変更するのではなく、状態データを変更し、状態に基づいてビューを構築します。これはSwiftUIの背後にあるコア原則であり、ビューの懸念をそれを駆動するデータ(一部の用語ではViewModel)から分離することができます。

したがって、のデータモデルがあると仮定しましょうCard(準拠させるIdentifiable-これは後で必要になります):

struct Card: Identifiable {
  let id = UUID()
  let name: String
}

そして、カードの配列をビューの状態変数として定義しましょう。

@State private var cards: [Card] = [Card(name: "foo")]

次に、ボディはこれらのカードをForEachまたはListビューで表示できます。

var body = some View {
  VStack() {
    Button("Add Card") {
       self.cards.append(Card(name: "I'm an added card"))
    }
    ForEach(cards) { card in
       CardView(for: card) // if your CardView had parameters
    }
  }
}

ボタンを閉じるCardと、cards状態変数に新しいインスタンスが追加されます。それでおしまい。ビューの内容は直接変更されません。ビューは変更を確認し(SwiftUIが舞台裏で行うことです)、それ自体を再レンダリングします。

Card準拠する必要がある理由は、各カードを一意に識別する方法をIdentifiable知らせるためでしたForEach識別可能に準拠せずに、次のようなキーパスを使用できます。

ForEach(cards, id: \.self) { card in
  // ...
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

swiftUIで、ボタンを使用して画面に新しいビューを追加することは可能ですか?

分類Dev

AppleScriptを使用してアプリケーションの新しいボタンまたはメニュー項目を作成することは可能ですか?

分類Dev

SwiftUIにサービスを設定し、データをビューにプッシュしてUIを更新することは可能ですか?

分類Dev

Mongooseを使用してMongoDBに新しいデータベースを作成することは可能ですか?

分類Dev

EXECを使用して他のデータベースにビューを作成することは可能ですか?

分類Dev

watchOSで、ルートビューにつながるステータスバーボタンなしでビューを表示することは可能ですか?

分類Dev

新しいMongoDBドキュメントを作成する前にreq.bodyにデータを追加することは可能ですか?

分類Dev

スタックナビゲーターを使用してボタンを押すことで、ある画面から別の画面に移動するにはどうすればよいですか?

分類Dev

無視オプションを特定の値に設定して、新しいgitサブモジュールを追加/開始することは可能ですか?

分類Dev

UIHostingController / SwiftUIを使用して表示されたビューを閉じるボタンを作成するにはどうすればよいですか?

分類Dev

glReadPixelsを使用しているときにデータをクランプしないことは可能ですか?

分類Dev

javascriptまたはjqueryを使用して新しい要素を作成して追加することは可能ですか?

分類Dev

Office Js Apiを使用してExcelシートにボタンを追加することはできますか?

分類Dev

SwiftUIのボタンを使用してビュー間を移動するにはどうすればよいですか?

分類Dev

Chromeの要素の検査ウィンドウに新しいタブを追加することは可能ですか?

分類Dev

<img>タグを使用してページビューを起動することは可能ですか?

分類Dev

djangoレストフレームワークのクラスベースのビューに新しい機能を追加することは可能ですか?

分類Dev

大画面デバイスを使用しているときに、ナビゲーションバーのこのハンバーガーボタンを非表示にするにはどうすればよいですか?

分類Dev

ツールバーに検索ボタンを配置することは可能ですか?ただし、ホームビュー専用ですか?

分類Dev

GoogleMapsにボタンを追加することは可能ですか?

分類Dev

SwiftUIを使用してSwift5でシートとして表示される新しいビューにCoreDataコンテキストを渡す方法は?

分類Dev

ステータスバーメニューとして使用されるNSMenuにボタンを追加するにはどうすればよいですか?

分類Dev

新しいJava 14 Record機能を使用して、同じRecordに複数のコンストラクターを作成することは可能ですか?

分類Dev

コンピューターのモニターをテレビの画面として使用する: それは可能ですか?

分類Dev

バインド変数を使用してOracleビューを作成することは可能ですか?

分類Dev

フォームのマテリアライズドビューに新しいインデックスを作成することは可能ですか? 'としてマテリアライズドビューを作成しますか?

分類Dev

リサイクラービューがある画面の下部にボタンを追加するにはどうすればよいですか。ボタンがリサイクラービューの最後の要素を非表示にしないように

分類Dev

デュアルモニターを使用しているときに、YouTubeビデオを画面全体に表示するにはどうすればよいですか?

分類Dev

GraphQLミューテーションを使用しているときにデータを返さないことは可能ですか?

Related 関連記事

  1. 1

    swiftUIで、ボタンを使用して画面に新しいビューを追加することは可能ですか?

  2. 2

    AppleScriptを使用してアプリケーションの新しいボタンまたはメニュー項目を作成することは可能ですか?

  3. 3

    SwiftUIにサービスを設定し、データをビューにプッシュしてUIを更新することは可能ですか?

  4. 4

    Mongooseを使用してMongoDBに新しいデータベースを作成することは可能ですか?

  5. 5

    EXECを使用して他のデータベースにビューを作成することは可能ですか?

  6. 6

    watchOSで、ルートビューにつながるステータスバーボタンなしでビューを表示することは可能ですか?

  7. 7

    新しいMongoDBドキュメントを作成する前にreq.bodyにデータを追加することは可能ですか?

  8. 8

    スタックナビゲーターを使用してボタンを押すことで、ある画面から別の画面に移動するにはどうすればよいですか?

  9. 9

    無視オプションを特定の値に設定して、新しいgitサブモジュールを追加/開始することは可能ですか?

  10. 10

    UIHostingController / SwiftUIを使用して表示されたビューを閉じるボタンを作成するにはどうすればよいですか?

  11. 11

    glReadPixelsを使用しているときにデータをクランプしないことは可能ですか?

  12. 12

    javascriptまたはjqueryを使用して新しい要素を作成して追加することは可能ですか?

  13. 13

    Office Js Apiを使用してExcelシートにボタンを追加することはできますか?

  14. 14

    SwiftUIのボタンを使用してビュー間を移動するにはどうすればよいですか?

  15. 15

    Chromeの要素の検査ウィンドウに新しいタブを追加することは可能ですか?

  16. 16

    <img>タグを使用してページビューを起動することは可能ですか?

  17. 17

    djangoレストフレームワークのクラスベースのビューに新しい機能を追加することは可能ですか?

  18. 18

    大画面デバイスを使用しているときに、ナビゲーションバーのこのハンバーガーボタンを非表示にするにはどうすればよいですか?

  19. 19

    ツールバーに検索ボタンを配置することは可能ですか?ただし、ホームビュー専用ですか?

  20. 20

    GoogleMapsにボタンを追加することは可能ですか?

  21. 21

    SwiftUIを使用してSwift5でシートとして表示される新しいビューにCoreDataコンテキストを渡す方法は?

  22. 22

    ステータスバーメニューとして使用されるNSMenuにボタンを追加するにはどうすればよいですか?

  23. 23

    新しいJava 14 Record機能を使用して、同じRecordに複数のコンストラクターを作成することは可能ですか?

  24. 24

    コンピューターのモニターをテレビの画面として使用する: それは可能ですか?

  25. 25

    バインド変数を使用してOracleビューを作成することは可能ですか?

  26. 26

    フォームのマテリアライズドビューに新しいインデックスを作成することは可能ですか? 'としてマテリアライズドビューを作成しますか?

  27. 27

    リサイクラービューがある画面の下部にボタンを追加するにはどうすればよいですか。ボタンがリサイクラービューの最後の要素を非表示にしないように

  28. 28

    デュアルモニターを使用しているときに、YouTubeビデオを画面全体に表示するにはどうすればよいですか?

  29. 29

    GraphQLミューテーションを使用しているときにデータを返さないことは可能ですか?

ホットタグ

アーカイブ