向 UITextField 添加前缀字符
Adding Prefixed Character to UITextField
我有一个用于格式化 phone 数字的 UITextField。我正在尝试添加一个 "+" sign
前缀作为第一个字符,无法删除。格式化和检查工作正常,但有前缀似乎不起作用..
一开始它不显示"+" sign
,但是如果我写一个字符然后删除,它会显示“+”号。我知道这是因为 shouldChangeCharactersInRange
在我键入第一个数字之前不会被调用,但是为什么 makePrefix()
函数不添加前缀?
所以我卡在了“用户点击了 UITextField 但还没有输入字符”的时候..
override func viewDidLoad() {
super.viewDidLoad()
makePrefix()
}
func makePrefix() {
let attributedString = NSMutableAttributedString(string: "+")
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.whiteColor(), range: NSMakeRange(0,1))
phoneTextField.attributedText = attributedString
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
{
if textField == phoneTextField {
textField.typingAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]
return false
}
return true
}
func formattedPhoneNumber(updatedTextString: NSString, textField: UITextField) {
textField.text = "\(updatedTextString as String)"
print(updatedTextString)
}
检查textFieldDidBeginEditing
,当textField成为第一响应者时它会被调用。
检查文本是否以“+”开头,如果不是则调用您的 makePrefix()。
使用 leftView
到 UITextField
的优雅解决方案
let prefix = UILabel()
prefix.text = "+"
// set font, color etc.
prefix.sizeToFit()
phoneTextField.leftView = prefix
phoneTextField.leftViewMode = .always // or .whileEditing
我有一个用于格式化 phone 数字的 UITextField。我正在尝试添加一个 "+" sign
前缀作为第一个字符,无法删除。格式化和检查工作正常,但有前缀似乎不起作用..
一开始它不显示"+" sign
,但是如果我写一个字符然后删除,它会显示“+”号。我知道这是因为 shouldChangeCharactersInRange
在我键入第一个数字之前不会被调用,但是为什么 makePrefix()
函数不添加前缀?
所以我卡在了“用户点击了 UITextField 但还没有输入字符”的时候..
override func viewDidLoad() {
super.viewDidLoad()
makePrefix()
}
func makePrefix() {
let attributedString = NSMutableAttributedString(string: "+")
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.whiteColor(), range: NSMakeRange(0,1))
phoneTextField.attributedText = attributedString
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
{
if textField == phoneTextField {
textField.typingAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]
return false
}
return true
}
func formattedPhoneNumber(updatedTextString: NSString, textField: UITextField) {
textField.text = "\(updatedTextString as String)"
print(updatedTextString)
}
检查textFieldDidBeginEditing
,当textField成为第一响应者时它会被调用。
检查文本是否以“+”开头,如果不是则调用您的 makePrefix()。
使用 leftView
到 UITextField
let prefix = UILabel()
prefix.text = "+"
// set font, color etc.
prefix.sizeToFit()
phoneTextField.leftView = prefix
phoneTextField.leftViewMode = .always // or .whileEditing