是否可以为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/

10-11 19:55