6

目標:

  1. ボタン付きの行/セルを作成する
  2. 行/セルをフォームに埋め込む

私がしたこと:

  1. ボタン付きのセルを作成しました。
struct PointTypeButtons : View {
    var body: some View {
        
        VStack {
            HStack {
                Text("Aligment")
                    .font(.subheadline)
                Spacer()
            }
            
            HStack {
                
                Button(action: {}) {
                    Image(systemName: "text.alignleft")
                        .padding(.horizontal, 25.0)
                        .padding(.vertical)
                        .background(Color.black)
                        .cornerRadius(4)
                }
                Button(action: {}) {
                    Image(systemName: "text.aligncenter")
                        .padding(.horizontal, 25.0)
                        .padding(.vertical)
                        .background(Color.black)
                        .cornerRadius(4)
                }
                Button(action: {}) {
                    Image(systemName: "text.aligncenter")
                        .padding(.horizontal, 25.0)
                        .padding(.vertical)
                        .background(Color.black)
                        .cornerRadius(4)
                }
                Button(action: {}) {
                    Image(systemName: "text.alignright")
                        .padding(.horizontal, 25.0)
                        .padding(.vertical)
                        .background(Color.black)
                        .cornerRadius(4)
                }
            }
        }
        .frame(height: nil)
    }
}

横一列に4つのボタン、

  1. 次に、このセルをフォームに配置しました。
struct ToolbarBezier : View {
    var body: some View {
        HStack {
            Spacer()
            
            Form {
                PointTypeButtons()
            }
            .frame(width: 320.0)
            
        }
    }
}

フォームに埋め込まれたボタンとテキスト

問題: タップすると、ボタンではなくセル全体が選択されるようになりました。

質問: ボタンをタップして選択するにはどうすればよいですか? フォーム上のすべてのボタン (セルではない) を公開する必要がありますか? 問題は、この場合、フォームに巨大なコードベースがあり、物事をきれいに整理したかったことです...

4

2 に答える 2

9

ベータ 5 の時点で、SwiftUI はViewを含むButtonものを「フォーム ボタン」と見なします。これは、セル全体がタップ可能なターゲットになることを意味します。私の経験では、複数ある場合は最後のボタンを選択するようです。

これを回避するには、ボタンをまったく使用しないように選択できます。代わりに、onTapGesture()イベントを使用してタップを検出します。

これは同じ画像ボタンですが、タップ可能な画像に変換されています。前景色はボタン スタイルから来ていたので、ここで明示的に定義する必要があります。

Image(systemName: "text.alignleft")
    .foregroundColor(Color.accentColor)
    .padding(.horizontal, 25.0)
    .padding(.vertical)
    .background(Color.black)
    .cornerRadius(4)
    .onTapGesture {
        print("align left tapped")
    }
于 2019-08-03T20:18:38.487 に答える