Ограничение текста в UITextView

Я пытаюсь ограничить ввод текста в UITextView в какао-тач. Я действительно хочу ограничить количество строк, а не количество символов. Пока у меня есть это, чтобы подсчитать количество строк:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if ([text isEqualToString:@"\n"]) {
        rows++;
    }
    NSLog(@"Rows: %i", rows);
    return YES;
}

Однако это не работает, если строка автоматически переносится, а не пользователь нажимает клавишу возврата. Есть ли способ проверить, был ли текст перенесен, аналогично проверке на "\ n"?

Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
11 911
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

К сожалению, использование NSString -stringWithFont: forWidth: lineBreakMode: не работает - какой бы режим переноса вы ни выбрали, текст переносится с шириной, меньшей, чем текущая ширина, а высота становится равной 0 на любых строках переполнения. Чтобы получить реальную фигуру, поместите веревку в рамку, которая выше, чем та, которая вам нужна - тогда вы получите высоту, превышающую ваш реальный рост.

Обратите внимание на мою выдумку (вычитая 15 из ширины). Это может быть как-то связано с моими взглядами (у меня одно внутри другого), поэтому оно может вам не понадобиться.

- (BOOL)textView:(UITextView *)aTextView shouldChangeTextInRange:(NSRange)aRange replacementText:(NSString*)aText
{
        NSString* newText = [aTextView.text stringByReplacingCharactersInRange:aRange withString:aText];

        // TODO - find out why the size of the string is smaller than the actual width, so that you get extra, wrapped characters unless you take something off
        CGSize tallerSize = CGSizeMake(aTextView.frame.size.width-15,aTextView.frame.size.height*2); // pretend there's more vertical space to get that extra line to check on
        CGSize newSize = [newText sizeWithFont:aTextView.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];

        if (newSize.height > aTextView.frame.size.height)
            {
            [myAppDelegate beep];
            return NO;
            }
        else
            return YES;
}

Привет, Джейн. Я знаю, что этот пост довольно старый, но похоже, что это очень похожая проблема на ту, с которой я столкнулся [здесь] (stackoverflow.com/questions/5605226/…). Это проблема, которую вы здесь описываете, или ваше решение немного другой проблемы?

n.evermind 09.04.2011 17:47

В iOS 7 я обнаружил следующие значения полей и отступов для UITextView, которые могут быть причиной того, что вам нужно использовать tallerSize: textContainerInset и textContainer.lineFragmentPadding. См. Ссылка на UITextView

Mariano Paniga 20.12.2013 16:10

Другие вопросы по теме