当我绑定它的值时,SwiftUI TextField 的行为很奇怪(不能输入中文,偶尔退格会跳过一个字符)

Posted

技术标签:

【中文标题】当我绑定它的值时,SwiftUI TextField 的行为很奇怪(不能输入中文,偶尔退格会跳过一个字符)【英文标题】:SwiftUI TextField behaves weirdly when I bind its value (can't type Chinese, occasionally backspaces skip a character) 【发布时间】:2020-08-20 07:28:36 【问题描述】:

这是一个最小复制的代码。我怀疑这与更改 SearchTerm 导致 UI 重新呈现或其他什么有关,但我不太明白这一点。理想情况下,我会onEditingChange,但我想对每个人做出反应keypress

struct ContentView: View 
    @State var searchTerm: String = "Hello World!"
    
    var body: some View 
        
        let binding = Binding<String>(get: 
            self.searchTerm
        , set: 
            if $0 != self.searchTerm
            
                self.searchTerm = $0
            
        )
        
        return VStack
            TextField("Search field", text: binding)
            Text(searchTerm)
        
    

Here you can see a gif of the buggy behavior

(这是在最新的非测试版 Xcode、Swift、macOS 等上)

编辑:我认为这可能只是一个 SwiftUI 错误 - https://developer.apple.com/forums/thread/128721

【问题讨论】:

为什么不直接绑定$searchTerm 这只是一个最小的复制 - 我的真实场景涉及术语 -> (bla blah vlah vblah) -> 在列表中搜索结果。哦! - 直接绑定也仍然会重现错误 哦原来,repro可以做得更小:***.com/questions/60908880/… 我为此在苹果错误报告系统中填写了一个错误。 Here 是雷达。 【参考方案1】:

SwiftUI TextField keyboard flashes and breaks typing in other languages https://developer.apple.com/forums/thread/128721

大家好,也遇到了这个问题。我相信这是一个无法解决的平台错误,我的解决方案只是使用包装好的 UIKit UITextField...这是我希望避免的。

【讨论】:

以上是关于当我绑定它的值时,SwiftUI TextField 的行为很奇怪(不能输入中文,偶尔退格会跳过一个字符)的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 绑定到选择器的变量与选择器的选定值不匹配

为啥当我让这个函数返回它的值时,函数会无限重复自己?

我的 SQL 函数有啥问题,当我尝试在 C# 中检索它的值时它总是返回 null?

SwiftUI:如何在函数计算 @State 值时同时更新视图?

SwiftUI如何让绑定到同一个状态的多个TextField呈现出不同输入行为

SwiftUI如何让绑定到同一个状态的多个TextField呈现出不同输入行为