首先利用UITextField的addTarget方法,监听UITextField的文字变化:
textField.addTarget(self, action: "textDidChange:", forControlEvents: UIControlEvents.EditingChanged)
然后实现textDidChange:方法,这里直接判断text的长度,在输入中文时会有坑,所以判读输入格式,然后判断是否存在被mark的text,在中文输入的过程中的字母就是被mark的,如果没有mark就判断长度,这样就能够实现我们想要的效果了
var kMaxLength: Int {
return 6
}//注意:此结构在import下,class上(大神勿喷)
func textDidChange(sender:UITextField) {
print("\(textField.text)")
let lang = textInputMode?.primaryLanguage
if lang == "zh-Hans" {
let range = textField.markedTextRange
if range == nil {
if textField.text?.characters.count >= kMaxLength {
textField.text = textField.text?.substringToIndex((textField.text?.startIndex.advancedBy(kMaxLength))!)
}
}
}
else {
if textField.text?.characters.count >= kMaxLength {
textField.text = textField.text?.substringToIndex((textField.text?.startIndex.advancedBy(kMaxLength))!)
}
}
}
这里还有一点小坑,就是这是最新的swift的截取字符串的方法,String.startIndex(或endIndex).advancedBy()能够取到需要的String.Index
本人新手,此博客仅用来学习和笔记,有不对的地方请指出,大家可以一起讨论