UITextView вставляет текст в текст textview

Я хочу иногда вставлять текст в текстовый объект UITextView. Например, если пользователь нажимает кнопку «Новый абзац», я хотел бы вставить двойную новую строку вместо стандартной одиночной новой строки.

Как я могу пойти на такое? Должен ли я читать строку из UITextView, изменять ее и записывать обратно? Тогда как я узнаю, где находится указатель?

Спасибо


person John Smith    schedule 08.05.2010    source источник
comment
возможный дубликат замены текста в UITextView с поддержкой NSUndoManager   -  person Bo Persson    schedule 27.04.2012


Ответы (5)


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

textView.text = [textView.text stringByAppendingString:@"\n\n"];
person Martin Gordon    schedule 08.05.2010
comment
нужно иметь дело с тем фактом, что это может быть не конец строки. Какая-то функция, подобная вставке StringAtPoint? Какие? - person John Smith; 08.05.2010
comment
Нашел! на самом деле это insertString:atIndex: - person John Smith; 08.05.2010
comment
Возможно, вы захотите установить textView.scrollEnabled = NO перед обновлением textView.text; это предотвращает раздражающую прокрутку до конца текстового представления - person Ziga Kranjec; 15.09.2010
comment
Если TextView имеет много текста, это может быть довольно медленным, так как каждый раз необходимо копировать много текста. Было бы разумно заменить текстовую строку текстового представления на MutableString и просто использовать ее каждый раз, когда вы вставляете? - person NHDaly; 19.04.2013

UITextview имеет метод insertText и учитывает положение курсора.

- (void)insertText:(NSString *)text

Например:

[myTextView insertText:@"\n\n"];
person sudo    schedule 27.05.2014
comment
Как это не принятый ответ? Это правильный способ сделать это, не прибегая к хакам. - person NYC Tech Engineer; 18.12.2015
comment
@sudo Я не знаю, что я сделал не так в прошлый раз, когда пробовал это, но теперь это работает! Большое спасибо! Это спасло мой день (особенно потому, что оно учитывает положение курсора!!!!!!!!!!!) - person ParkerHalo; 30.03.2016
comment
@NYCTechEngineer, вероятно, потому, что документация плохая, а наследование еще больше скрывает вещи, и если это где-то явно не упомянуто, его трудно найти. Наконец-то я нашел insertText документы (developer.apple.com/documentation/uikit/uikeyinput ), но ссылок на него нет и ничего о нем не упоминается. - person toraritte; 04.01.2018

Вот как я это реализовал, и, похоже, это работает хорошо.

- (void) insertString: (NSString *) insertingString intoTextView: (UITextView *) textView  
{  
    NSRange range = textView.selectedRange;  
    NSString * firstHalfString = [textView.text substringToIndex:range.location];  
    NSString * secondHalfString = [textView.text substringFromIndex: range.location];  
    textView.scrollEnabled = NO;  // turn off scrolling or you'll get dizzy ... I promise  

    textView.text = [NSString stringWithFormat: @"%@%@%@",  
      firstHalfString,  
      insertingString,  
      secondHalfString];  
    range.location += [insertingString length];  
    textView.selectedRange = range;  
    textView.scrollEnabled = YES;  // turn scrolling back on.  

}
person Brian Moncur    schedule 08.10.2010
comment
привет Брайан, у меня такая же проблема, я пробую ваш ответ, я могу вставить текст, но текстовое представление всегда переходит на последнюю строку после вставки текста, не могли бы вы помочь мне еще? - person R. Dewi; 28.05.2012
comment
@R.Dewi, установите textView.scrollEnabled=NO перед изменением и измените его обратно после. - person Dustin; 02.08.2012

Для Swift 3.0

Вы можете добавить текст, вызвав метод insertText экземпляра UITextView.

Пример:

textView.insertText("yourText")
person Parth Adroja    schedule 08.03.2017
comment
Это отличный, очень чистый вариант. Спасибо. - person Chris Amelinckx; 18.06.2017

Это правильный ответ!

Позиция курсора также правильная.

Позиция прокрутки также правильная.

- (void) insertString: (NSString *) insertingString intoTextView: (UITextView *) textView
{
    [textView replaceRange:textView.selectedTextRange withText:insertingString];
}
person hayakawatomoaki    schedule 24.09.2014