大佬教程收集整理的这篇文章主要介绍了macOS SwiftUI:在垂直方向而不是水平方向通过焦点切换,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 macOS SwiftUI 应用程序,其中多个 $('iframe').each(function(i,E){
let iframeSrc = $(E).attr('src');
$(E).attr('src',iframeSrc);
});
位于 let iframeSrc = $('.youtube_vIDeo').attr('src');
$('.youtube_vIDeo').attr('src',iframeSrc);
中。它们分为三列,每列大约有 10 个文本字段。如果只有一列通过 TextFIEld
的 Tab 键会做预期的事情:它会垂直向下移动列表,允许用户以垂直顺序输入文本。但是,如果有两列或更多列,则 Tab 键会从左到右移动焦点,在移动到下一行之前遍历整行。
我希望焦点从上到下移动,在移动到下一列之前完成一整列。有谁知道如何做到这一点?到目前为止,我尝试过的一切都没有奏效。
这是一些显示问题的代码
LazyHGrID
我尝试过的一些方法不起作用:
TextFIEld
。这有同样的问题。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),]
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
。好的,我找到了一种有效的方法。它对我的应用程序不起作用,因为我的应用程序太复杂了,当我使用这种方法时,编译器无法对其进行类型检查。希望这是 Apple 将在未来版本中改进的地方。但我在这里发布解决方案,以防有人觉得它有用。我说它“有点工作”的原因是因为它没有正确响应 tab 键,只有 enter 键。这似乎是 Apple 的错误。
基本思路如下
struct ContentView: View {
@State private var input = [String](repeaTing: "",count: 4)
@FocusState private var focus: Int?
var body: some View {
let rows = [GridItem(.fixed(20),alignment: .leading),GridItem(.fixed(20),alignment: .leading)
]
LazyHGrid(rows: rows) {
Group {
Text("column 1")
TextField("",text: $input[0],onCommit: { updateFocus() })
.focused($focus,equals: 0)
TextField("",text: $input[1],equals: 1)
}.frame(width: 100)
Group {
Text("column 2")
TextField("",text: $input[2],equals: 2)
TextField("",text: $input[3],equals: 3)
}.frame(width: 100)
}
}
func updateFocus() {
if focus == nil {
focus = 0
} else {
focus = (focus! + 1) % 4
}
}
}
以上是大佬教程为你收集整理的macOS SwiftUI:在垂直方向而不是水平方向通过焦点切换全部内容,希望文章能够帮你解决macOS SwiftUI:在垂直方向而不是水平方向通过焦点切换所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。