2016-03-08 30 views
1

我想如果字符數越過200來去除的UITextField的最後一個字符刪除最後一個字符,但它沒有任何效果:中的UITextField

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
     print(textField.text?.characters.count) 
     if (textField.text?.characters.count > 200){ 
      self.textField.shake() 
      self.textField.becomeFirstResponder() 
      self.textField.text?.characters.dropLast() 
     } 
     return true 
    } 

回答

-1

試試這個:

let string = self.textField.text?.characters.dropLast() 
self.textField.text = String(string) 
+0

錯誤:'不能分配類型爲「SubSequence?」的valye鍵入「String?」' –

+0

問題是您需要考慮替換。你對未經編輯的值採取行動 –

1

你可以用以下任何一種方法的刪除文本框的文本字符的最後一個元素:

let myString = "Hello!" 
let result1 = myString.substringToIndex(myString.endIndex.advancedBy(-1)) // Hello 

var anotherString = "World!" 
let result2 = String.init(anotherString.characters.dropLast()) // World 

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    var newString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string) 
    print(newString.characters.count) 
    if newString.characters.count > 200{ 
    self.textField.shake() 
    self.textField.becomeFirstResponder() 
    self.textField.text = String.init(newString.characters.dropLast()) 
    //or self.textField.text = newString.substringToIndex(newString.endIndex.advancedBy(-1)) 
    } 
    return true 
} 
+0

謝謝,它真的幫助我:) –

2
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool // return NO to not change text 
{ 

    let textFieldString = textField.text! as NSString; 

    var newString = textFieldString.stringByReplacingCharactersInRange(range, withString:string) 

    if newString.characters.count > 200 { 

// This will remove just last character, If u want to remove all the characters starting from 201st character pass 200 to substringToIndex method 
     newString = newString.substringToIndex(newString.endIndex.advancedBy(-1)) 
     textField.text = newString 

     return false 
    } 

    return true 

}