下面是 UItextView 的处理,
当然 UItextField 在下面方法同样处理就好了
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
//允许删除
if text.isEmpty && range.length > 0 {
return true
} else {
//超过最大字符,一个字都不需要加
//举个栗子:却一个字时候,无法添加一个字以上的文字
if textView.text.count - range.length + text.count > 20 {
return false
} else {
return true
}
}
}
func textViewDidChange(_ textView: UITextView) {
let selectedRange = textView.markedTextRange
//获取高亮部分
let pos = textView.position(from: selectedRange?.start ?? UITextPosition(), offset: 0)
//如果在变化中是高亮部分在变,就不要计算字符了
if selectedRange != nil && pos != nil {
return
}
let count = textView.text.count
print("\(count)/20")
}
OC 部分
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
if ([text isEqualToString:@""] && range.length > 0) {
//删除
return YES;
}else{
//超过最大字符,一个字都不需要加
//举个栗子:却一个字时候,无法添加一个字以上的文字
if (textView.text.length - range.length + text.length > 20) {
return NO;
}else{
return YES;
}
}
}
- (void)textViewDidChange:(UITextView *)textView
{
UITextRange *selectedRange = [textView markedTextRange];
//获取高亮部分
UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
//如果在变化中是高亮部分在变,就不要计算字符了
if (selectedRange && pos) {
return;
}
NSUInteger count = textView.text.length;
NSLog(@"%ld/20", (unsigned long)count);
}
网友评论