- 重寫實(shí)現(xiàn)文本代理方法
//MARK: 文本代理方法
extension ChinabankWithdrawViewController:UITextFieldDelegate{
//當(dāng)文本變化時(shí)調(diào)用
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if self.textFieldCardNum == textField{
//改變的字符
self.changeCharacter = string
//字符串改變的長度
self.textFieldCardNumLength = (textField.text?.length)!
//銀行卡號為數(shù)不超過20位
if self.textFieldCardNumLength == 24{
self.textFieldShouldClear(textField)
}
}
return true
}
//后退時(shí)調(diào)用
func textFieldShouldClear(textField: UITextField) -> Bool {
let index = self.textFieldCardNum.text?.endIndex.predecessor()
self.textFieldCardNum.text = self.textFieldCardNum.text?.substringToIndex(index!)
return true
}
}
- 為了防止無法后退的問題,聲明一個(gè)觀察屬性變量,當(dāng)文本長度增加時(shí),繼續(xù)執(zhí)行每四位加一個(gè)空格的邏輯,否則清除后退
var changeCharacter = ""
var textFieldCardNumLength: Int = 0 {
willSet{
//如果文本
if textFieldCardNumLength < newValue{
// 四位加一個(gè)空格
if changeCharacter == " " {
if ((self.textFieldCardNum.text?.length)! - 2) % 5 == 0{
let index = self.textFieldCardNum.text?.endIndex.predecessor()
self.textFieldCardNum.text = self.textFieldCardNum.text?.substringToIndex(index!)
}
}else{
if (self.textFieldCardNum.text?.length)! % 5 == 0{
self.textFieldCardNum.text?.appendContentsOf(" ")
}
}
}
}
}
以上代碼實(shí)現(xiàn)不好,最終版:
// MARK: - 實(shí)現(xiàn)文本輸入框代理方法
extension BankTransferViewController: UITextFieldDelegate {
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let maxCharOfCardNo = 25
let maxCharOfMoney = 8
if textField === self.textFieldCardNo {
var text = NSString(string: textField.text!)
let characterSet = NSCharacterSet(charactersInString: "0123456789")
let nstring = NSString(string: string.stringByReplacingOccurrencesOfString(" ", withString: ""))
if nstring.rangeOfCharacterFromSet(characterSet.invertedSet).location != NSNotFound {
return false
}
text = text.stringByReplacingCharactersInRange(range, withString: string)
text = text.stringByReplacingOccurrencesOfString(" ", withString: "")
var newString = String(text).insertCharByInterval(" ", interval: 4)
newString = newString.stringByTrimmingCharactersInSet(characterSet.invertedSet)
if (newString.length >= maxCharOfCardNo) {
return false;
}
textField.text = newString
return false;
}
if(textField === self.textFieldMoney) {
if (range.location>(maxCharOfMoney - 1)) {
return false
}
}
return true
}
}