大阪で(ry

明治時代の大阪の活気を再び!

大阪の皮を被った、技術メモと開発日記。

IT総合

[Swift見習い]FormにHStackでボタンを配置すると被るというか・・・

2023/1/10 更新

Swift勉強中です
Formを使うとレイアウトが小綺麗に見えるので使ってたら
ボタンとかが横に置きたくても縦に並んでしまうので
HStackを使って横に並べると
最初に置いたボタンが優先されて、その横に置いたボタンが被されて実行されてしまう

Form{
        HStack
                Button(action :{
                        //処理するコード
                }){
                        Text("Hello")
                }

                Button(action :{
                        //処理するコード
                }){
                        Text("Hello2")
                }
        }
}

この場合だとHello2のをタップしてもHelloのボタンのコードが実行されてしまうわけです

そして調べたらこちらのベージがひっかかりました
[SwiftUI]見た目を変えると挙動が変わってしまう例
悩んでる内容と同じもの
ただ、惜しい事に解決例がない

リンク切れだが恐らく次のサイトも同じような事に触れているものと思われる(検索でひっかかっただけなので・・・)
Swift SwiftUI、Listの1行内に2個のボタン配置はダメ、一緒に …

色々調べて解決法がようやく見つかった

—–ここから更新分(2023/1/10)—–
swiftui – SwiftUI-クリック可能なボタンを持つセル(フォーム内)(https://cloud6.net/so/swiftui/1613832)
↑※ドメイン切れを起こしてるっぽく売られてた、改めて検索しても0件になりWebArchiveにも存在しないのでキャッシュ含めて完全消滅、こうなる運命のサイト最近多いね(汗
代替の部品(パーツ)でonTapGestureすればいい、なるほど!
でこの記事が終わってたのでそれだと不親切だと感じたのでサンプルコードを追加します

Form{
	GeometryReader { bodyView in
 	HStack(alignment:.center) {
 
  	Text("ボタン1")
  		.onTapGesture {
  			hoge()
	}
            .padding(.all, 20.0)
                .frame(width:130, height:25, alignment: .center)
            .overlay(
                RoundedRectangle(cornerRadius: 16)
                    .stroke(Color.blue, lineWidth: 1)
            )
                
	Text("ボタン2")
		.onTapGesture {
 			fuga()
		}
            .padding(.all, 20.0)
                .frame(width:130, height:25, alignment: .center)
            .overlay(
                RoundedRectangle(cornerRadius: 16)
                    .stroke(Color.blue, lineWidth: 1)
            )

}.frame(width:bodyView.size.width)
}.frame(height:適当な数字で体裁を整えよう)

func hoge()
{
}

func fuga()
{
}