2010-07-03 2 views
15

Прежде чем я использовал этот метод ....iOS4: Невозможно Программный Выделите Низ UITextView

//TextView is a UITextView 

[TextView scrollRangeToVisible:NSMakeRange([TextView length], 0)]; 

... который будет программно прокрутить до конца UITextView, но это не кажется для работы в iOS 4.0. Есть ли способ программно прокручивать до конца UITextView без изменения прав на редактирование или вставки точки (где пользователь может нажать на UITextView и отобразить клавиатуру)?

Кроме того, нужно ли назначать владельца файла в качестве делегата? Есть ли разница?

+0

Что вы имеете в виду под "не работает". Просматривает ли он вообще? Вызывается ли клавиатура? – TechZen

+0

При использовании [TextView scrollRangeToVisible: NSMakeRange ([TextView.text length], 0)]; Он не прокручивается вообще, но он не меняет редактируемый текст (что хорошо для меня). Образец проекта, демонстрирующего это на http://dl.dropbox.com/u/8256776/Bugsy.zip это шаблон ViewController с UITextView и двумя кнопками. При нажатии одной кнопки он добавляет «\ nFive» в UITextView и пытается прокрутить вниз до конца (безуспешно). При нажатии другой кнопки он добавляет «\ nSix» в UITextView и пытается прокрутить вниз до конца (безуспешно). – OscarTheGrouch

+0

Что вы подразумеваете под неудачей? Вы тестируете это на симуляторе? Я вижу, что текстовое окно прокручивается до дна ... Если я прокручу его вверх, когда я нажимаю пять или шесть, он прокручивается вниз. Он работает отлично. – SpaceDog

ответ

37

UITextView не имеет свойства length. Следующий код работает хорошо для моей среды.

[TextView scrollRangeToVisible:NSMakeRange([TextView.text length], 0)]; 
6

Ответ не сработал для меня, но после того, что вы будете использовать для TableView, отлично работает. Просто убедитесь, что ваш UITextView называется textView.

if (textView.contentSize.height > textView.frame.size.height) 
{ 
    CGPoint offset = CGPointMake(0, textView.contentSize.height - textView.frame.size.height); 
    [self.textView setContentOffset:offset animated:YES]; 
} 
+1

Да! Это работает отлично (и я пробовал всевозможные варианты scrollRangeToVisible в моем приложении!) – iPhoneDollaraire

+0

Это казалось лучше, чем другой, принятый ответ! благодаря – Rambatino

0

Это то, что я использую, работает отлично. shouldScrollTextToBottom задается вызывающим видом (1 вид контроллера ниже в стеке вызывающего)

(void)viewDidAppear:(BOOL)animated 
{ // scroll to bottom if required 
    if(shouldScrollTextToBottom) 
    [txtMyTextView scrollRectToVisible:CGRectMake(0, 0, txtMyTextView.frame.size.width, txtMyTextView.frame.size.height * 6) animated:YES]; 
} 

6 сколь угодно большое число, которое должно быть кратно высоты UITextView в. Я обнаружил, что со значением 5 мой взгляд не прокручивается до абсолютного дна.

4

В IOS8 звонок для обеспеченияLayoutForTextContainer, похоже, заставляет это решение работать. Потребовал мне почти час, чтобы отслеживать это.

logObject.layoutManager.ensureLayoutForTextContainer(logObject.textContainer) 

    logObject.setContentOffset(CGPointMake(0.0, logObject.contentSize.height), animated:false) 
1

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

[_myTextView.layoutManager ensureLayoutForTextContainer:_myTextView.textContainer]; 
[_myTextView scrollRangeToVisible:NSMakeRange([_myTextView.text length], 0)]; 
Смежные вопросы