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")