NavigationLink下に配置したButtonのタップが反応しない
SwiftUIでちょっと困ったこと。 Listの中にボタンを配置した時に意図通りにならなくてなんでかなーとなった。
こんな風に、ただボタンを置いただけのときは問題なかった。ボタンをタップすると action
は実行される。
struct ContentView: View { let items = ["AAA", "BBB", "CCC"] var body: some View { NavigationView { List { ForEach(items, id: \.self) { item in Button(action: { print("Hello world!") // 反応する! }) { Text(item) } } } .navigationBarTitle("Test") } } }
だけど、各行を NavigationLink
で包むとボタンのタップに反応しなくなっちゃった。
(あと何故かボタンの色も黒くなってる。)
struct ContentView: View { let items = ["AAA", "BBB", "CCC"] var body: some View { NavigationView { List { ForEach(items, id: \.self) { item in NavigationLink(destination: Text(item)) { Button(action: { print("Hello world!") // 反応しない! }) { Text(item) } } } } .navigationBarTitle("Test") } } }
意図としては、ボタンをタップしたら action
の中が実行され、ボタンの外側をタップしたら遷移するようにしたかった。
結局、 onTapGesture()
でタップを検出するようにして解決(?)した。
Button(action: { print("Hello world!") // 反応しない! }) { Text(item) } .onTapGesture { print("Hello world!") // これなら反応する! }
環境: Xcode11.1, Swift5