how to insert text at any cursor position in uitex

2019-04-19 01:40发布

问题:

i want to implement Code by which i can start to insert text at any position of cursor in UITextView in iphone sdk

any idea? thank you in advance..

i refereed this link: iPhone SDK: How to create a UITextView that inserts text where you tap?

But not Getting it.

回答1:

Dan's answer is manually changing the text. It's not playing well with UITextView's UndoManager.

Actually it's very easy to insert text with UITextInput protocol API, which is supported by UITextView and UITextField.

[textView replaceRange:textView.selectedTextRange withText:insertingString];

Note: It's selectedTextRange in UITextInput protocol, rather than selectedRange



回答2:

This is what I use with a custom keyboard, seems to work ok, there may be a cleaner approach, not sure.

NSRange range = myTextView.selectedRange;  
NSString * firstHalfString = [myTextView.text substringToIndex:range.location];  
NSString * secondHalfString = [myTextView.text substringFromIndex: range.location];  
myTextView.scrollEnabled = NO;  // turn off scrolling  

NSString * insertingString = [NSString stringWithFormat:@"your string value here"];

myTextView.text = [NSString stringWithFormat: @"%@%@%@",  
                 firstHalfString,  
                 insertingString,  
                 secondHalfString];  
range.location += [insertingString length];  
myTextView.selectedRange = range;  
myTextView.scrollEnabled = YES;  // turn scrolling back on.


回答3:

The simplest way (but it won't replace selected text) is to use the insertText: method:

[textView insertText:@"some text you want to insert"];

UITextView conforms to UITextInput which itself conforms to UIKeyInput.



回答4:

Here is the Glorfindel's answer in Swift3. The text its inserting here it pulls out of the clipboard.

if let textRange = myTextView.selectedTextRange {
   myTextView.replace(textRange, withText:UIPasteboard.general.string!)
}