2013-02-10 5 views
0

У меня есть UITextView, где мне нужно контролировать, где начинать и заканчивать текст.Есть ли способ ограничить ширину текста в UITextView

Это потому, что я использую пузырь в качестве фонового изображения для UITextView, и мне нужно отобразить текст внутри изображения пузыря.

До сих пор я был в состоянии контролировать, где текст начать использовать:

self.contentOffset = (CGPoint){.x = -10, .y = -10}; 

, но я понятия не имею, как контролировать, где текст конец. В настоящее время по умолчанию используется вся ширина UITextView.

ответ

0

определить #define TEXT_LENGTH 25 // Все, что ваш предел является

В UITextView вызывает этот метод всякий раз, когда пользователь вводит новый символ или удаляет существующий символ.

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    NSUInteger newLength = (textView.text.length - range.length) + text.length; 
    if(newLength <= TEXT_LENGTH) 
    { 
     return YES; 
    } else { 
     NSUInteger mySpace = TEXT_LENGTH - (textView.text.length - range.length); 
     textView.text = [[[textView.text substringToIndex:range.location] 
              stringByAppendingString:[text substringToIndex: mySpace]] 
             stringByAppendingString:[textView.text substringFromIndex:(range.location + range.length)]]; 
     return NO; 
    } 
} 

Использование replacementText не replacementString в методе, так осторожны с различными между replacementString и replacementText.

1

Будет ли пузырь расти в высоту по мере растягивания текста? Или пузырь будет ограничен 1 строкой? В любом случае, я думаю, вы должны использовать другой подход для решения этой проблемы.

Используйте -sizeWithFont:constainedToSize:lineBreakMode: экземпляр NSString, чтобы выяснить размер текста. Если размер больше, чем допустимое вами значение, прекратите разрешать ввод (если это ваша цель) или увеличите высоту пузыря и разрешите текст для продолжения на следующей строке.

Обычно вы выполняете эти пересчеты при вводе текста, что означает, что вы должны реализовать метод UITextViewDelegate -textView:shouldChangeTextInRange:replacementText: в соответствии с приведенными выше предложениями.

- или -

Просто ограничив размер TextView и установки lineBreakMode & numberOfLines также может быть достаточно для ваших целей.

Смежные вопросы