即使用户点击键盘上的 Return 键,SwiftUI 中是否也可以将输入光标保持在同一个文本字段上?
这是我的代码:
struct RowView: View {
@Binding var checklistItem: ChecklistItem
@ObservedObject var checklist = Checklist()
@ObservedObject var viewModel: ChecklistViewModel
var body: some View {
HStack {
Button {
self.checklistItem.isChecked.toggle()
self.viewModel.updateChecklist(checklistItem)
} label: {
Circle()
.strokeBorder(checklistItem.isChecked ? checklistSelected : contentPrimary, lineWidth: checklistItem.isChecked ? 6 : 2)
.foregroundColor(backgroundSecondary)
.clipShape(Circle())
.frame(width: 16, height: 16)
}.buttonStyle(BorderlessButtonStyle())
// swiftlint:disable trailing_closure
TextField(
"Add...",
text: $checklistItem.name,
onCommit: {
do {
if !checklistItem.name.isEmpty {
self.viewModel.updateChecklist(checklistItem)
self.checklistItem.name = checklistItem.name
}
}
}
)
// swiftlint:enable trailing_closure
.foregroundColor(checklistItem.isChecked ? contentTertiary : contentPrimary)
Spacer()
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,在用户点击键盘上的返回键后, TextField() onCommit 应正常激活,但光标停留在同一文本字段中,以便用户可以继续输入新元素。
iOS 15+
您可以使用@FocusStateand 在提交时立即将TextField重新设置为获得焦点。
例子:
struct ContentView: View {
@State private var text = "Hello world!"
@FocusState private var isFieldFocused: Bool
var body: some View {
Form {
TextField("Field", text: $text, onCommit: {
isFieldFocused = true
print("onCommit")
})
.focused($isFieldFocused)
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
| 归档时间: |
|
| 查看次数: |
2248 次 |
| 最近记录: |