我们的iPhone应用程序中有一个可编辑的UITextView。当用户按下某些工具栏按钮时,我们需要在光标位置插入一些文本,但似乎无法找到记录(或未记录)的方法来查找光标的当前位置。
有没有人有任何想法或有其他人取得过类似的东西?
答案 0 :(得分:32)
像drewh所说,你可以使用UITextView的selectedRange来返回插入点。该范围的长度始终为零。以下示例显示了如何使用它。
NSString *contentsToAdd = @"some string";
NSRange cursorPosition = [tf selectedRange];
NSMutableString *tfContent = [[NSMutableString alloc] initWithString:[tf text]];
[tfContent insertString:contentsToAdd atIndex:cursorPosition.location];
[theTextField setText:tfContent];
[tfContent release];
答案 1 :(得分:10)
使用UITextView selectedRange
属性在文本视图为第一响应者时查找插入点。否则,当视图不在焦点上时,此属性将返回NSNotFound
。如果在这种情况下需要知道光标位置,可以考虑对UITextView
进行子类化并覆盖canResignFirstResponder
方法,在此方法中可以将光标位置存储到成员变量中。
答案 2 :(得分:8)
你试过UITextView.selectedRange
吗?它返回NSRange
,其位置元素应该告诉您光标所在的位置。
答案 3 :(得分:6)
Swift 4 :
// lets be safe, thus if-let
if let cursorPosition = textView.selectedTextRange?.start {
// cursorPosition is a UITextPosition object describing position in the text
// if you want to know its position in textView in points:
let caretPositionRect = textView.caretRect(for: cursorPosition)
}
我们只需使用textView.selectedTextRange
获取所选文字范围,光标位置位于start
位置。