如果我将绑定传递到 TextField,那么每当您编辑文本的中心时,插入每个字符后光标都会跳到行尾。 这仅发生在实际设备 (iPadOS) 上。模拟器不显示此行为。 我的解决方法是创建一个状态变量,使用绑定中的值设置 onAppear 并复制 onEditingChanged。然后,我将此状态变量传递给 TextField,而不是直接传递绑定变量。这打破了事实的唯一来源。
谁有更好的解决方案。
struct infoSheetView: View {
@Binding var cameraURL: String
@State var tmpCameraURL: String = ""
var body: some View {
VStack {
Form{
Section(header: Text("Camera").font(.title)) {
TextField("Camera URL", text: $tmpCameraURL, onEditingChanged: {_ in
cameraURL = tmpCameraURL
}).autocapitalization(.none).disableAutocorrection(true)
}
}.frame(width:400,height:390)
.onAppear() {
tmpCameraURL = cameraURL
}
}
}
在运行 17.3 的 iPhone 14 Pro 上进行测试。 Xcode 15.2、Swift 5。我将目标最低部署更改为 iOS 14.7...但我无法在运行 14.7 的设备上进行测试。
以下代码似乎对我有用。如果我将光标放在中间并编辑文本,则不会跳转到文本字段的末尾。当我在 NewView 上编辑后返回 ContentView 时,ContentView 文本会更新。
struct ContentView: View {
@State var someText: String = "A string"
var body: some View {
NavigationView{
VStack {
Text(someText)
NavigationLink(destination: NewView(someText: $someText)) {
Label("Goto NewView", systemImage: "globe")
}
}
}
}
}
struct NewView: View {
@Binding var someText: String
var body: some View {
VStack {
Form {
Section(header: Text("Camera").font(.title)) {
TextField("Camera Field", text: $someText)
.autocapitalization(.none)
.autocorrectionDisabled()
}
}
.frame(width: 400, height: 390)
}
}
}