我想偶尔在UITextView文本对象中插入文本。例如,如果用户按下“New Paragraph”按钮,我想插入一个双换行符,而不仅仅是标准的单行换行符。
我怎么能这样做?我是否必须从UITextView读取字符串,改变它并将其写回?那我怎么知道指针在哪里?
由于
答案 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];
}