SwiftUI/macOS Button無しのキーボードショートカットで、focusされるTextFieldを変えたいです。

前提・実現したいこと

複数のTextFieldが縦に並んで表示されるようなmacOS用アプリを作っています。
マウス操作をすることなく、キーボードの上下矢印キーで入力するTextFieldを変えたいと思っています。
Button有りならば.keyboardShortcutを使って実現できるのですが、Buttonを作ることなく上下キーによるTextFieldのfocusの移動を実現できないかと思い質問させていただきました。

該当のソースコード

Swift

struct ContentView: View{ @State var textArray: [String] = ["", "", ""] @FocusState private var focusField: Int? var body: some View{ VStack{ Button("上へ"){ if(focusField == 1 || focusField == 2){ focusField! -= 1 } }.keyboardShortcut(KeyEquivalent.upArrow, modifiers: []) Button("下へ"){ if(focusField == 0 || focusField == 1){ focusField! += 1 } }.keyboardShortcut(KeyEquivalent.downArrow, modifiers: []) ForEach(0 ..< 3){index in TextField("", text: $textArray[index]) .focused($focusField, equals: index) } }.frame(height: 300) }}

Button有りならば、このようなコードで実現できます。
Buttonを表示させることなく、focusFieldのプラス・マイナスが実行されるようになれば良いということですが、その方法がわかりません。

アドバイスよろしくお願いいたします。

どんな方法でも教えていただけたら幸いです。何卒よろしくお願いいたします。

コメントを投稿

0 コメント