程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了macOS SwiftUI:在垂直方向而不是水平方向通过焦点切换大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决macOS SwiftUI:在垂直方向而不是水平方向通过焦点切换?

开发过程中遇到macOS SwiftUI:在垂直方向而不是水平方向通过焦点切换的问题如何解决?下面主要结合日常开发的经验,给出你关于macOS SwiftUI:在垂直方向而不是水平方向通过焦点切换的解决方法建议,希望对你解决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,请注明来意。