swiftui 文本字段每次更改时都会将光标移动到末尾

问题描述 投票:0回答:1

如果我将绑定传递到 TextField,那么每当您编辑文本的中心时,插入每个字符后光标都会跳到行尾。 这仅发生在实际设备 (iPadOS) 上。模拟器不显示此行为。 我的解决方法是创建一个状态变量,使用绑定中的值设置 onAppear 并复制 onEditingChanged。然后,我将此状态变量传递给 TextField,而不是直接传递绑定变量。这打破了事实的唯一来源。

谁有更好的解决方案。

  • 斯威夫特5
  • iOS 14.7
  • XCODE 13 测试版 8 月 10 日
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
        }
    }
    
}
swiftui textfield
1个回答
0
投票

在运行 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)
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.