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)

}

}

您只需要一个ObservableObjectTextField字符串的包装即可。可以将其视为一个解释器,该解释器每次发生更改时都会得到通知,并且能够将修改发送回TextField。但是,无需PassthroughSubject使用@Published修饰符创建,只需较少的代码即可得到相同的结果。

提到一句,鉴于我们在不需要的时候覆盖了文本,因此您需要使用didSet,而不必使用,willSet否则可能会导致递归循环。

以上是 SwiftUI TextField最大长度 的全部内容, 来源链接: utcz.com/qa/417113.html

回到顶部