У меня есть UITextView, пользователь может писать максимум 160 символов в textView. Как я могу исправить максимальную длину текста UITextView?
Как можно отредактировать длину текста UITextView?
Ответ 1
Заменить
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
с
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
на который отвечает здесь
Ответ 2
Этот фрагмент кода также работает с 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;
}
}
Ответ 3
Поздняя встреча с этим ответом; Решение 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;
}
Ответ 4
вы можете увидеть аналогичный вопрос здесь. он получил ответ
Ответ 5
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
}
}