SwiftUI 文本字段格式 onEditingChanged

Posted

技术标签:

【中文标题】SwiftUI 文本字段格式 onEditingChanged【英文标题】:SwiftUI Textfield format onEditingChanged 【发布时间】:2020-05-06 14:42:43 【问题描述】:

我有一个格式化的 SiwftUI TextField,我希望它在编辑更改时格式化。这样做的正确方法是什么?

TextField("", value: $binding, formatter: $formatter,
                    onEditingChanged:  (editingChanged) in
                        //How to force formatting here?
                    ,
                    onCommit: 
                        //Here formatting happens.
                )

【问题讨论】:

不要使用构造函数的变体,而是使用SwiftUI TextField with formatter not working?中的代理绑定 【参考方案1】:

当 TextField 的编辑模式发生变化时,会调用 OnEditing 闭包。所以当你开始编辑时它会被调用为 true ,当你结束时会被调用为 false (最后也会调用 onCommit ,除非你取消,但需要检查)。

我认为这不是你想要的。如果您想在用户更改 TextField 中的文本时进行格式化,请尝试以下操作:

  TextField("text", text: $text).padding()
            .onReceive(text.publisher)  (c) in
                print("Got \(c)")
                self.text = self.text.uppercased()
        

但是,请记住,当您将格式应用于 $text 时,将发布新的格式化版本,从而触发第二次关闭调用。根据您想要的格式以及文本在其他地方的使用方式,这种双重调用可能会也可能不会成为问题。

【讨论】:

以上是关于SwiftUI 文本字段格式 onEditingChanged的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 文本字段返回键事件

输入 SwiftUI 后更改文本字段的焦点

文本字段点击正在关闭 SwiftUI 中的导航链接

我的搜索栏中的文本字段不允许输入文本(swiftUI)

SwiftUI - 如何修改数组中的文本字段

SwiftUI 中的多行可编辑文本字段