UITextView在textview文本中插入文本

时间:2010-05-08 01:33:20

标签: iphone cocoa-touch uitextview

我想偶尔在UITextView文本对象中插入文本。例如,如果用户按下“New Paragraph”按钮,我想插入一个双换行符,而不仅仅是标准的单行换行符。

我怎么能这样做?我是否必须从UITextView读取字符串,改变它并将其写回?那我怎么知道指针在哪里?

由于

6 个答案:

答案 0 :(得分:32)

由于text的{​​{1}}属性是不可变的,因此您必须创建一个新字符串并将text属性设置为它。 NSString有一个实例方法(UITextView),用于通过将参数附加到接收器来创建新字符串:

-stringByAppendingString:

答案 1 :(得分:24)

UITextview有一个insertText方法,它尊重游标位置。

- (void)insertText:(NSString *)text

例如:

[myTextView insertText:@"\n\n"];

答案 2 :(得分:9)

这是我实现它的方式,它看起来效果很好。

- (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.  

}

答案 3 :(得分:3)

适用于Swift 3.0

您可以通过调用UITextView实例的方法textView.insertText("yourText") 来附加文字。

示例:

{{1}}

答案 4 :(得分:2)

- (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 :(得分:2)

这是一个正确的答案!

光标位置也正确。

滚动位置也是正确的。

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