「Formで複数のButtonを実装しようとしたら使えなかった」
「Form内のButtonのタップが機能しない」
「Formのボタンの挙動がおかしい」
そう言った人に向けてこの記事は書かれています。
どうも、ちょげ(@chogetarou)です。
Formに複数のボタンを入れると、ビューは表示されます。
ここまでは良いのですが、いざボタンをタップしてみると、なぜか思い通りの挙動をしてくれない。
Formの1枠に複数のビューを入れてエラーが出るわけではなく、原因が分からない。
いろいろ調べてやっと解決することが出来、複数のボタンがちゃんと動作してくれるようになりました。
原因
原因は、Formの1枠がタップされることになるからです。
普通のボタンの場合は、1つ1つのボタンが独立しています。
なので、押したいボタンをタップすれば、タップしたボタンしか動作しません。
しかし、フォームでは、1つ1つのボタンが独立しておらず、枠内の全てのボタンが、フォームの1つの枠と言う認識になります。
なので、押したいボタンをタップしても、ボタンではなく、フォームの1枠がタップされたことになります。
要するに、ボタンをタップすると、1枠内の全てのボタンが同時にタップされるのです。
解決法
Buttonビューに、buttonStyleモディファイアのBorderlessButtonStyle()を指定することで解決できます。
これを指定することにより、タップしたボタンだけが動作するようになります。
Button(action: {}, label: {
Text("分割")
})
.buttonStyle(BorderlessButtonStyle())
まとめ
- ボタンをタップすると、フォームの枠自体がタップされることが原因
- buttonStyle(BorderlessButtonStyle())をモディファイアをボタンに付けることで解決できる
読んで頂きありがとうございました。
参考になれば嬉しいです。
コメント