中的UITextField

问题描述:

我想如果字符数越过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 
    } 

试试这个:

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

错误:'不能分配类型为“SubSequence?”的valye键入“String?”' –

+0

问题是您需要考虑替换。你对未经编辑的值采取行动 –

你可以用以下任何一种方法的删除文本框的文本字符的最后一个元素:

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

谢谢,它真的帮助我:) –

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 

}