填充数据后,文本字段就不会格式化

时间:2019-12-24 21:12:10

标签: ios swift iphone format uitextfield

我有一个数字文本字段,当用户在字段中键入内容时,该文本字段已经格式化;它看起来像这样:

enter image description here

这是我的代码:

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

phoneNumberTextField.delegate = self
retrieveUserData()

}

    func formattedNumber(number: String) -> String {
        let cleanPhoneNumber = number.components(separatedBy: CharacterSet.decimalDigits.inverted).joined()
        let mask = "(XXX) XXX-XXXX"

        var result = ""
        var index = cleanPhoneNumber.startIndex
        for ch in mask where index < cleanPhoneNumber.endIndex {
            if ch == "X" {
                result.append(cleanPhoneNumber[index])
                index = cleanPhoneNumber.index(after: index)
            } else {
                result.append(ch)
            }
        }
        return result
    }



extension AccounInfotVC: UITextFieldDelegate {

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        guard let text = textField.text else { return false }
        let newString = (text as NSString).replacingCharacters(in: range, with: string)
        textField.text = formattedNumber(number: newString)
        return false
    }
}

但是,当我的视图加载时;一旦使用以下代码从数据库中自动填充了该数字,该数字就不会格式化:

func retrieveUserData(){


        db.collection(DatabaseRef.Users).document(userID).getDocument { (snap, error) in
            self.phoneNumberTextField?.text = phoneNumber

    }
}

因此,数字如下所示填充: enter image description here

代替此:enter image description here

有什么主意,我该如何获取它以与用户键入时相同的格式填充文本字段?

请注意,当我保存电话号码时,我会删除空格和字符,以便将号码像1234567889一样保存在数据库中。

1 个答案:

答案 0 :(得分:2)

self.phoneNumberTextField?.text = phoneNumber

您不需要触发shouldChangeCharactersIn

self.phoneNumberTextField?.text = formattedNumber(number:phoneNumber)