Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to know when text is pasted into a UITextView?

What event is fired when a block of text is pasted into a UITextView? I need to modify the frame of my textView when the text is pasted in.

like image 363
Mr Ordinary Avatar asked Sep 02 '25 17:09

Mr Ordinary


2 Answers

Here is what i use to detect paste events in UITextView:

 // Set this class to be the delegate of the UITextView. Now when a user will paste a text in that textview, this delegate will be called.
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {

    // Here we check if the replacement text is equal to the string we are currently holding in the paste board
    if ([text isEqualToString:[UIPasteboard generalPasteboard].string]) {

        // code to execute in case user is using paste

    } else {

        // code to execute other wise
    }

    return YES;
}
like image 80
carlos16196 Avatar answered Sep 04 '25 07:09

carlos16196


Checking the pasteboard's string by if string == UIPasteboard.general.string takes a couple of seconds if you have long sentence in the pasteboard. The user sees the keypad is frozen while this check. My solution is to check if the length of new characters is longer than 1. If it is longer than 1, the string is from the pasteboard.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if string.characters.count > 1{
            //User did copy & paste

        }else{
            //User did input by keypad
        }            
         return true
 }
like image 44
Takamitsu Mizutori Avatar answered Sep 04 '25 08:09

Takamitsu Mizutori