如何解决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 举报,一经查实,本站将立刻删除。