У меня есть UITextView, пользователь может писать максимум 160 символов в textView. Как я могу исправить максимальную длину текста UITextView?Как можно отредактировать длину текста UITextView?
ответ
заменить
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
с
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
который отвечает here
Этот фрагмент кода работает с Copy/Paste, но и справляется с ситуацией, когда пытаясь вставить количество символов, которые сделают просмотр текста выше предела. В этом случае вставляются только первые символы строки.
#define MAX_LENGTH 15 // Whatever your limit is
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
NSUInteger newLength = (textView.text.length - range.length) + text.length;
if(newLength <= MAX_LENGTH)
{
return YES;
} else {
NSUInteger emptySpace = MAX_LENGTH - (textView.text.length - range.length);
textView.text = [[[textView.text substringToIndex:range.location]
stringByAppendingString:[text substringToIndex:emptySpace]]
stringByAppendingString:[textView.text substringFromIndex:(range.location + range.length)]];
return NO;
}
}
Отличное решение – kevinlawler
Единственная проблема (если только это не моя реализация) - это как заставить счетчик работать с этим. –
Что вы называете 'counter'? Отображение количества символов в текстовом представлении? Если да, вы можете обновить счетчик в textView: textDidChange: method (он работает в моем проекте). – manicaesar
Немного позднее этого ответа; Решение manicaesar не работало для меня. Вот моя реализация той же идеи:
#define MAX_LENGTH 140
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)replacementText
{
NSString *newText = [ textView.text stringByReplacingCharactersInRange: range withString: replacementText ];
if([newText length]<= MAX_LENGTH){
return YES;
}
// case where text length > MAX_LENGTH
textView.text = [ newText substringToIndex: MAX_LENGTH ];
return NO;
}
Я предпочитаю этот метод, так как он также ограничивает символы при вставке текста, который превышает MAX_LENGTH. Имейте в виду, замените «replaceText» на «текст», чтобы избежать ошибок. –
это прекрасно, не сбой – NSGodMode
Swift 3
fileprivate let maxLen = 5
extension MyViewController : UITextViewDelegate{
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
let newLen = (textView.text.characters.count - range.length) + text.characters.count
return newLen <= maxLen
}
}
Это не дубликат .... Пользователь нужен метод определения длины 'UITextView' не в' UITextField ' –