Reputation: 311
We have a UITextView in our iPhone app which is editable. We need to insert some text at the cursor location when the users presses some toolbar buttons but can't seem to find a documented (or undocumented) method of finding the current location of the cursor.
Does anybody have any ideas or has anybody else achieved anything similar?
Upvotes: 31
Views: 28634
Reputation: 19737
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)
}
We simply use textView.selectedTextRange
to get selected text range and cursor position is at its start
position.
Upvotes: 14
Reputation: 11378
Use UITextView selectedRange
property to find the insertion point when the text view is first responder. Otherwise, when the view is not in focus, this property returns NSNotFound
. If you need to know the cursor position in that case, consider subclassing UITextView
and overriding canResignFirstResponder
method, where you can store cursor position to a member variable.
Upvotes: 11
Reputation: 10167
Have you tried UITextView.selectedRange
? It returns an NSRange
, whose location element should tell you, where the cursor is.
Upvotes: 8
Reputation: 589
Like drewh said, you can use UITextView's selectedRange to return the insertion point. The length of this range is always zero. The example below shows how to it.
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];
Upvotes: 31