我希望在
UITextView
和UITextField
中设置最多允许输入的字符数。 然后会在一个小标签上显示这个数字(为用户提供参考,类似Twitter)。UITextView
和UITextField
中设置最多允许输入的字符数。 然后会在一个小标签上显示这个数字(为用户提供参考,类似Twitter)。更新 Swift 4.X
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)
let numberOfChars = newText.count
return numberOfChars < 10 // 10 Limit Value
}
试试这个:
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
let newText = (textView.text as NSString).stringByReplacingCharactersInRange(range, withString: text)
let numberOfChars = newText.characters.count // for Swift use count(newText)
return numberOfChars < 10;
}
numberOfLines
,当它实际上是字符数? - rmaddyreturn numberOfChars <= 10;
吗?(小于号应该是小于等于号)? - Robertoguard !text.isEmpty else { return true }
。 - SwanySWIFT 4
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)
return newText.count < 10
}
Swift 4:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)
return newText.count <= 70
}
试试这个:
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
print("chars \(textView.text.characters.count) \( text)")
if(textView.text.characters.count > 20 && range.length == 0) {
print("Please summarize in 20 characters or less")
return false;
}
return true;
}
Swift 3.0
只需重写这个UITextFieldDelegate函数,设置所需的characterLimit变量,您就可以开始了:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{
let characterLimit = 5
let newText = NSString(string: textField.text!).replacingCharacters(in: range, with: string)
let numberOfChars = newText.characters.count
return numberOfChars < characterLimit
}
Swift 5 更新
提供最直接的结果
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
return range.location < 140 // limit to 140 chars
}
Swift 4 , Xcode 9.1 GM
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
return textView.text.count + (text.count - range.length) <= 200
}
Swift 4/ Xcode 9.1
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
let currentText = textView.text ?? ""
guard let stringRange = Range(range, in: currentText) else { return false }
let changedText = currentText.replacingCharacters(in: stringRange, with: text)
return changedText.count <= 399 // Pass your character count here
}
添加支持通过maxLength剪切文本并避免UNDO操作崩溃:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if let maxLength = maxLength {
let maxReplacementLength = min(range.length, maxLength - range.location)
let replacementRange = NSRange(location: range.location, length: maxReplacementLength)
let result = NSString(string: (textView.text ?? "")).replacingCharacters(in: replacementRange, with: text)
if result.count <= maxLength && range.length <= maxLength - range.location {
return true
}
textView.text = String(result[..<result.index(result.startIndex, offsetBy: min(result.count, maxLength))])
return false
}
return true
}
Swift 5
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
var newText = textView.text!
newText.removeAll { (character) -> Bool in
return character == " " || character == "\n"
}
return (newText.count + text.count) <= 40
}