SwiftUI onCommit 不会将光标移动到下一个文本字段 - MacOS 应用程序

问题描述

我有两个使用 onCommit 的 TextField。按回车键保存值。但是,这不会自动将光标移动到下一个 TextField。我希望它像将光标移动到下一个 TextField 的选项卡按钮一样工作,但这不会保存值(由于 onCommit 需要按下输入/返回)。我发现的最佳解决方案是使用按钮,但这会导致可用性不佳,因为我将在此视图上使用 ForLoop。

struct ModuleDetailView: View {
    @Binding var subjectDetails: [Subjects]
    @State private var subject = ""
    @State private var grade = ""
    var body: some View {
        vstack {
            TextField("Subject",text: $subject,onCommit: appendData)
            TextField("Grade",text: $grade,onCommit: appendData)
            vstack {
                Text("Output")
                ForEach(subjectDetails) { subject in
                    HStack {
                        Text(subject.name)
                        Text(subject.grade)
                    }
                }
            }
        }
    }
    
    func appendData() {
        if subject != "" && grade != "" {
            let module = Subjects(name: subject,grade: grade)
            subjectDetails.append(module)
        }
    }
}

预览代码

struct ModuleDetailView_Previews: PreviewProvider {
    static var previews: some View {
        PreviewWrapper()
    }
    struct PreviewWrapper: View {
        @State var modules = [Subjects]()
        var body: some View {
            ModuleDetailView(subjectDetails: $modules)
        }
    }
}

两个文本字段同时可见。发生的情况是,在我从第一个 textField 按下 Enter 后,光标就会消失,这与我们按下 TAB 时的工作方式不同 - 只是移动到下一个。我希望它的工作方式类似于按下 TAB 时的行为方式。因此,在这种情况下,使用 firstResponder 可能不是一个好的选择

主题结构:

struct Subjects: Identifiable {
    let id = UUID()
    var name: String
    var grade: String
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)