将前缀字符添加到UITextField

时间:2016-03-16 20:42:03

标签: ios swift uitextfield nsattributedstring uitextfielddelegate

我有一个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)
}

2 个答案:

答案 0 :(得分:2)

检查textFieldDidBeginEditing,当textField成为第一响应者时,它将被调用。

检查文本是否以“+”开头,如果没有调用makePrefix()。

答案 1 :(得分:1)

leftViewUITextField的优雅解决方案

let prefix = UILabel()
prefix.text = "+"
// set font, color etc.
prefix.sizeToFit()

phoneTextField.leftView = prefix
phoneTextField.leftViewMode = .always // or .whileEditing