ios - 如何设置文本字段字符限制 SwiftUI?

标签 ios swift validation swiftui textfield

我正在使用 SwiftUi 版本 2 进行应用程序开发。我遇到了 SwiftUI 中可用文本字段的问题。我不想再使用 UITextField。我想限制 TextField 中的字符数。我搜索了很多,找到了一些与此相关的答案,但这些答案不适用于 SwiftUI 版本 2。

class textBindingManager: ObservableObject{
    let characterLimit: Int
    @Published var phoneNumber = "" {
        didSet {
            if phoneNumber.count > characterLimit && oldValue.count <= characterLimit {
                phoneNumber = oldValue
            }            
        }
    }
    init(limit: Int = 10) {
        characterLimit = limit
    }    
}

struct ContentView: View {
    @ObservedObject var textBindingManager = TextBindingManager(limit: 5)        
    var body: some View {
        TextField("Placeholder", text: $textBindingManager.phoneNumber)
    }
}

最佳答案

无需在您发布的属性上使用 didSet。您可以向 TextField 添加修饰符并将字符串值限制为其前缀限制在字符限制内:

import SwiftUI

struct ContentView: View {
    @ObservedObject var textBindingManager = TextBindingManager(limit: 5)
    var body: some View {
        TextField("Placeholder", text: $textBindingManager.phoneNumber)
            .padding()
            .onChange(of: textBindingManager.phoneNumber, perform: editingChanged)
    }
    func editingChanged(_ value: String) {
        textBindingManager.phoneNumber = String(value.prefix(textBindingManager.characterLimit))
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

class TextBindingManager: ObservableObject {
    let characterLimit: Int
    @Published var phoneNumber = ""
    init(limit: Int = 10){
        characterLimit = limit
    }
}

关于ios - 如何设置文本字段字符限制 SwiftUI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64223276/

相关文章:

没有表单的Html 5表单验证

ios - Quickblox聊天消息读取状态

ios - 我如何解析 JSON 以将其转换为 Swift 中的对象数组?

ios - 向 Xcode 添加了单元测试目标 - 导入桥接 header 失败不会消失

操作观察期间的 Swift 4 KVO fatal error

java - 使用选项的 XSD 验证错误

ios - TableView 单元格内的 Collection View

ios - 为什么最新的 Swift 版本总是说变量在使用前没有初始化

swift - Swift 中来自 CGImageRef 的 NSData

C 编程 ncurses 输入验证