SwiftUI TextField max length

后端 未结 6 942
伪装坚强ぢ
伪装坚强ぢ 2020-11-30 06:52

Is it possible to set a maximum length for TextField? I was thinking of handling it using onEditingChanged event but it is only called when the us

6条回答
  •  醉酒成梦
    2020-11-30 06:54

    Write a custom Formatter and use it like this:

        class LengthFormatter: Formatter {
    
        //Required overrides
    
        override func string(for obj: Any?) -> String? {
           if obj == nil { return nil }
    
           if let str = (obj as? String) {
               return String(str.prefix(10))
           }
             return nil
        }
    
        override func getObjectValue(_ obj: AutoreleasingUnsafeMutablePointer?, for string: String, errorDescription error: AutoreleasingUnsafeMutablePointer?) -> Bool {
    
                    obj?.pointee = String(string.prefix(10)) as AnyObject
                    error?.pointee = nil
                    return true
                }
    
            }
    }
    

    Now for TextField:

    struct PhoneTextField: View {
            @Binding var number: String
            let myFormatter = LengthFormatter()
    
            var body: some View {
                TextField("Enter Number", value: $number, formatter: myFormatter, onEditingChanged: { (isChanged) in
                    //
                }) {
                    print("Commit: \(self.number)")
                }
                .foregroundColor(Color(.black))
            }
    
        }
    

    You will see the correct length of text get assigned to $number. Also, whatever arbitrary length of text is entered, it gets truncated on Commit.

提交回复
热议问题