文本字段在填充数据后未格式化

Textfield is not formatted once populated with data

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

这是我的代码:

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

    }
}

所以数字会像这样填充:

而不是这个:

知道如何让它以与用户键入时相同的格式填充文本字段吗?

请注意,当我保存 phone 数字时,我删除了空格和字符,因此数字在数据库中保存为 1234567889

这个

self.phoneNumberTextField?.text = phoneNumber

不会触发shouldChangeCharactersIn,你需要

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