是否可以为TextField
设置最大长度?我当时正在考虑使用onEditingChanged
事件来处理它,但仅在用户开始/完成编辑时才调用它,而在用户键入时不调用它。我也阅读了文档,但还没有找到任何东西。有什么解决方法吗?
TextField($text, placeholder: Text("Username"), onEditingChanged: { _ in
print(self.$text)
}) {
print("Finished editing")
}
最佳答案
使用SwiftUI,UI元素(如文本字段)绑定到数据模型中的属性。数据模型的工作是实现业务逻辑,例如限制字符串属性的大小。
例如:
import Combine
import SwiftUI
final class UserData: BindableObject {
let didChange = PassthroughSubject<UserData,Never>()
var textValue = "" {
willSet {
self.textValue = String(newValue.prefix(8))
didChange.send(self)
}
}
}
struct ContentView : View {
@EnvironmentObject var userData: UserData
var body: some View {
TextField($userData.textValue, placeholder: Text("Enter up to 8 characters"), onCommit: {
print($userData.textValue.value)
})
}
}
通过让模型来解决这个问题,UI代码变得更加简单,您不必担心会通过其他代码将更长的值分配给
textValue
。该模型根本不允许这样做。为了使场景使用数据模型对象,请将对
rootViewController
中的SceneDelegate
的分配更改为类似UIHostingController(rootView: ContentView().environmentObject(UserData()))
关于ios - SwiftUI TextField最大长度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56567572/