2015-09-01 3 views
1

Я хочу получить удаленный текст в UITextView.Как получить удаленный текст в UITextView?

Потому что мне нужно уменьшить UITextView, когда '\ n' удален.

Однако, shouldChangeTextInRange Метод делегата возвращает только последнюю строку.

Так, например

UITextView.text = @"ABCD\nEFG"; 

и пользователю удалить текст @"D\nEFG".

Затем возвращенный текст не '\ n'. поэтому я не знаю, должен ли сокращаться номер строки. Помоги мне!

+0

вы можете проверить размер текста. поэтому при уменьшении размера текста уменьшите UITextView. – Mehul

ответ

0

Вы знаете диапазон текста, который будет изменен в пределах shouldChangeTextInRange.

Перед тем, как вернуть YES из shouldChangeTextInRange, вы можете сканировать символы в пределах этого диапазона, чтобы увидеть, если есть «\n» или «\r» характер там, а затем вы можете уменьшить количество линий по количеству новых символов строки найдено В диапазоне.

+0

оптимальное решение !! – kkbpower

0

Простого решение

- (void)textViewDidChange:(UITextView *)textView 
{ 
    CGFloat fixedWidth = textView.frame.size.width; 
    CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)]; 
    CGRect newFrame = textView.frame; 
    newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height); 
    textView.frame = newFrame; 
} 

С помощью этого следующего кода, вы можете изменить высоту вашего UITextView в зависимости от фиксированной ширины (он работает на прошивке 7 и предыдущую версию):

- (CGFloat)textViewHeightForAttributedText:(NSAttributedString *)text andWidth:(CGFloat)width 
{ 
    UITextView *textView = [[UITextView alloc] init]; 
    [textView setAttributedText:text]; 
    CGSize size = [textView sizeThatFits:CGSizeMake(width, FLT_MAX)]; 
    return size.height; 
} 

С помощью этой функции вы берете NSAttributedString и фиксированную ширину, чтобы вернуть требуемую высоту. Если вы хотите, чтобы вычислить кадр из текста с определенным шрифтом вам, нужно использовать следующий код:

- (CGSize)text:(NSString *)text sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size 
{ 
    if ([text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)])‌ 
    { 
     CGRect frame = [text boundingRectWithSize:size 
              options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading) 
             attributes:@{NSFontAttributeName:font} 
              context:nil]; 
     return frame.size; 
    } 
    else 
    { 
     return [text sizeWithFont:font constrainedToSize:size]; 
    } 
} 

Это работало для меня iOS6 и 7:

CGSize textViewSize = [self.myTextView sizeThatFits:CGSizeMake(self.myTextView.frame.size.width, FLT_MAX)]; 
    self.myTextView.height = textViewSize.height; 
0

Вы можете использовать следующий код, чтобы получить высоту UITextView -

CGSize textViewSize = [text sizeWithFont:[UIFont fontWithName:@"font_name" size:font_size] 
        constrainedToSize:CGSizeMake(WIDHT_OF_VIEW, FLT_MAX) 
        lineBreakMode:UILineBreakModeTailTruncation]; 

Replace font_name и FONT_SIZE с фактическим значением, которое вы используете в UITextView. и замените WIDHT_OF_VIEW шириной вашего UITextView.

Вы можете получить высоту UITextView используя ниже code-
textViewSize.height

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