【问题标题】:Remove the last character in the UITextField删除 UITextField 中的最后一个字符
【发布时间】:2016-03-08 09:03:32
【问题描述】:

如果字符数超过 200,我会尝试删除 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
    }

【问题讨论】:

    标签: ios swift uitextfield


    【解决方案1】:
        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
    
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用以下任一方法删除 textField 文本字符的最后一个元素:

      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
      }
      

      【讨论】:

      • 谢谢,它真的帮了我:)
      【解决方案3】:

      试试这个:

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

      【讨论】:

      • 错误:Cannot assign valye of type "SubSequence?" to type "String?"
      • 问题是你需要考虑替换。您对未编辑的值采取行动
      【解决方案4】:

      添加字符串扩展

      extension String {
          func getSubString(from: Int, to: Int) -> String {
             let startIndex = self.index(self.startIndex, offsetBy: from)
             let endIndex = self.index(self.startIndex, offsetBy: to)
             return String(self[startIndex..<endIndex])
         }
      }
      

      用法

      if let text = exerciseAnswer.text, text.count > 0 {
          exerciseAnswer.text = text.getSubString(from: 0, to: text.count - 1)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多