UITextView вставляет текст в текстовый текст
Я хочу, чтобы иногда вставлять текст в текстовый объект UITextView. Например, если пользователь нажимает кнопку "Новый абзац", я хотел бы вставить двойную новую строку вместо стандартной единственной новой строки.
Как я могу так поступить? Должен ли я читать строку из UITextView, мутировать ее и записывать обратно? Тогда как я узнаю, где был указатель?
Спасибо
Ответы
Ответ 1
Так как свойство text
UITextView
является неизменным, вам нужно создать новую строку и установить для нее свойство text. NSString имеет метод экземпляра (-stringByAppendingString:
) для создания новой строки путем добавления аргумента к получателю:
textView.text = [textView.text stringByAppendingString:@"\n\n"];
Ответ 2
UITextview имеет метод insertText и соответствует позиции курсора.
- (void)insertText:(NSString *)text
например:
[myTextView insertText:@"\n\n"];
Ответ 3
Вот как я его реализовал и, похоже, работает хорошо.
- (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.
}
Ответ 4
- (void)insertStringAtCaret:(NSString*)string {
UITextView *textView = self.contentCell.textView;
NSRange selectedRange = textView.selectedRange;
UITextRange *textRange = [textView textRangeFromPosition:textView.selectedTextRange.start toPosition:textView.selectedTextRange.start];
[textView replaceRange:textRange withText:string];
[textView setSelectedRange:NSMakeRange(selectedRange.location + 1, 0)];
self.changesDetected = YES; // i analyze the undo manager in here to enabled/disable my undo/redo buttons
}
Ответ 5
Это правильный ответ!
Положение курсора также правильно.
Положение прокрутки также верно.
- (void) insertString: (NSString *) insertingString intoTextView: (UITextView *) textView
{
[textView replaceRange:textView.selectedTextRange withText:insertingString];
}
Ответ 6
Для Swift 3.0
Вы можете добавить текст, вызвав метод insertText
из UITextView
экземпляра.
Пример:
textView.insertText("yourText")