在iPhone上的UITextView中获取光标位置?

时间:2009-03-06 12:51:44

标签: iphone uitextview

我们的iPhone应用程序中有一个可编辑的UITextView。当用户按下某些工具栏按钮时,我们需要在光标位置插入一些文本,但似乎无法找到记录(或未记录)的方法来查找光标的当前位置。

有没有人有任何想法或有其他人取得过类似的东西?

4 个答案:

答案 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位置。