如何解决在列表SwiftUI 2.0中的TextField之间切换焦点
我想在SwiftUI中创建一个带有一系列TextField的列表,用户可以通过按回车键在它们之间进行切换。我发现this article与FocusBinding属性有关,但是我不确定自己是否在写路径上。最初,我在Swift 1.0中进行了一些设置,将UITextField包装在UIViewRepresentable中,但是仍然存在一些问题。使用Swift 2.0,检查文本字段的更改并做出响应似乎要容易得多,而且看来键盘偏移的一些复杂性已为您解决,所以如果我不必使用它,我希望这样的包装纸。
struct VirtuesListBody: View {
@EnvironmentObject var settings: UserSettings
@State var curIdx = -1
var body: some View {
List {
ForEach(Array(zip(self.settings.virtues.enumerated().filter({ !$1.deleted }).map({ $0.offset }),self.settings.virtues.map({ !$0.deleted }))),id: \.0) { idx,_ in
VirtuesRowItem(curIdx: self.$curIdx,idx: idx)
}
}
}
}
struct VirtuesRowItem: View {
@EnvironmentObject var settings: UserSettings
@Binding var curIdx: Int
let idx: Int
var body: some View {
Group {
if idx == self.settings.virtues.count - 1 {
TextField("",text: self.$settings.virtues[idx].name,onEditingChanged: { _ in
},onCommit: {
})
} else {
TextField("",onCommit: {
})
}
}
}
}
基本上,我有一个VirtuesRowItem视图列表,每个VirtuesRowItem由一个TextField构造。如果用户专注于列表中的第一个TextField,则当按下返回按钮时,我希望焦点移至列表中的下一个TextField。如果这是最后一项,我希望关闭键盘。
解决方法
根据@FocusedBinding
上的文档
如果多个视图使用相同的键发布绑定,则被包装的属性将从最接近焦点的视图反映绑定的值。
它似乎不允许您操纵firstReponder
。
不幸的是,您必须坚持使用包裹好的UITextField
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。