【发布时间】:2021-07-03 05:04:38
【问题描述】:
我有一个 macOS SwiftUI 应用程序,其中有几个 TextField 布局在 LazyHGrid 中。它们分为三列,每列大约有 10 个文本字段。如果在TextField 中只有一列制表符会发生预期的事情:它会在列表中垂直向下进行,从而允许用户以垂直顺序输入文本。但是,如果有两列或更多列,则 Tab 键会从左到右移动焦点,在移动到下一行之前遍历整行。
我希望焦点从上到下移动,在移动到下一列之前完成一整列。有谁知道如何做到这一点?到目前为止,我尝试过的任何方法都没有奏效。
这是一些显示问题的代码
import SwiftUI
struct ContentView: View {
@State private var input = [String](repeating: "", count: 4)
var body: some View {
let rows = [GridItem(.fixed(20), alignment: .leading),
GridItem(.fixed(20), alignment: .leading),
GridItem(.fixed(20), alignment: .leading),
]
LazyHGrid(rows: rows) {
Group {
Text("Column 1")
TextField("", text: $input[0])
TextField("", text: $input[1])
}.frame(width: 100)
Group {
Text("Column 2")
TextField("", text: $input[2])
TextField("", text: $input[3])
}.frame(width: 100)
}
}
}
我尝试过的一些方法不起作用:
- 改用
LazyVGrid。这也有同样的问题。 - 在具有
TextField的列之间添加一个空列。这对焦点顺序没有影响。 - 在
Group上创建focusScope。
【问题讨论】:
-
请添加一些代码