我想偶尔往UITextView文本对象中插入文本。例如,如果用户按下“新段落”按钮,我想要插入双倍换行符而不仅仅是标准的单个换行符。
我应该怎么做呢?我需要从UITextView读取字符串、修改它并将其写回吗?那么如何知道指针位置呢?
谢谢
我想偶尔往UITextView文本对象中插入文本。例如,如果用户按下“新段落”按钮,我想要插入双倍换行符而不仅仅是标准的单个换行符。
我应该怎么做呢?我需要从UITextView读取字符串、修改它并将其写回吗?那么如何知道指针位置呢?
谢谢
由于UITextView
的 text
属性是不可变的,所以您必须创建一个新字符串并将文本属性设置为它。NSString具有一个实例方法 (-stringByAppendingString:
),用于通过将参数附加到接收器来创建一个新字符串:
textView.text = [textView.text stringByAppendingString:@"\n\n"];
UITextview有一个insertText方法,并且它会尊重光标位置。
- (void)insertText:(NSString *)text
例如:
[myTextView insertText:@"\n\n"];
insertText
文档 (https://developer.apple.com/documentation/uikit/uikeyinput),但没有链接指向它,也没有任何提及。 - toraritte- (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.
}
textView.scrollEnabled=NO
,并在修改后将其改回。 - DustinSwift 3.0版本
您可以通过调用UITextView
实例的insertText
方法来添加文本。
例如:
textView.insertText("yourText")
这是一个正确的答案!
光标位置也是正确的。
滚动位置也是正确的。
- (void) insertString: (NSString *) insertingString intoTextView: (UITextView *) textView
{
[textView replaceRange:textView.selectedTextRange withText:insertingString];
}
- (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
}