我有一个数字文本字段,当用户在字段中键入内容时,该文本字段已经格式化;它看起来像这样:
这是我的代码:
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
}
}
有什么主意,我该如何获取它以与用户键入时相同的格式填充文本字段?
请注意,当我保存电话号码时,我会删除空格和字符,以便将号码像1234567889
一样保存在数据库中。
答案 0 :(得分:2)
此
self.phoneNumberTextField?.text = phoneNumber
您不需要触发shouldChangeCharactersIn
self.phoneNumberTextField?.text = formattedNumber(number:phoneNumber)