SwiftUI TextField最大长度
可以为设置最大长度TextField
吗?我当时正在考虑使用onEditingChanged
事件来处理它,但仅在用户开始/完成编辑时才调用它,而在用户键入时不调用它。我也阅读了文档,但还没有找到任何东西。有什么解决方法吗?
TextField($text, placeholder: Text("Username"), onEditingChanged: { _ in print(self.$text)
}) {
print("Finished editing")
}
回答:
Paulw11的答案稍短一些:
class TextBindingManager: ObservableObject { @Published var text = "" {
didSet {
if text.count > characterLimit && oldValue.count <= characterLimit {
text = oldValue
}
}
}
let characterLimit: Int
init(limit: Int = 5){
characterLimit = limit
}
}
struct ContentView: View {
@ObservedObject var textBindingManager = TextBindingManager(limit: 5)
var body: some View {
TextField("Placeholder", text: $textBindingManager.text)
}
}
您只需要一个ObservableObject
TextField字符串的包装即可。可以将其视为一个解释器,该解释器每次发生更改时都会得到通知,并且能够将修改发送回TextField。但是,无需PassthroughSubject
使用@Published
修饰符创建,只需较少的代码即可得到相同的结果。
提到一句,鉴于我们在不需要的时候覆盖了文本,因此您需要使用didSet
,而不必使用,willSet
否则可能会导致递归循环。
以上是 SwiftUI TextField最大长度 的全部内容, 来源链接: utcz.com/qa/417113.html