文本字段在填充数据后未格式化
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)
我有一个数字文本字段,当用户在该字段中键入时已经格式化;它看起来像这样:
这是我的代码:
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)