iOS - detect when user copy to clipboard - [UIPasteboard generalPasteboard]

13.8k Views Asked by At

quick easy question

while using a WebView with some text in it - the user can select a snippet of text from it and press a UIButton which I created - running the following action:

-(IBAction)copyToClip
{
    NSString *copyClip = [UIPasteboard generalPasteboard].string;
    NSLog(@"Clip = %@",copyClip);
    // (works fine)
}

I would like to call the same function without a UIButton, thus when the user did a "copy" action it will activate the above code. (I assume a listener)

what would be the appropriate listener for this?

3

There are 3 best solutions below

2
On BEST ANSWER

Use NSNotificationCenter and register for UIPasteboardChangedNotification: http://developer.apple.com/library/IOs/documentation/UIKit/Reference/UIPasteboard_Class/Reference.html#//apple_ref/c/data/UIPasteboardChangedNotification

[[NSNotificationCenter defaultCenter] addObserver:object selector:@selector(copyToClip) name:UIPasteboardChangedNotification object:nil];
0
On

Swift 5

UIPasteboard.changedNotification

NotificationCenter.default.addObserver(self, selector: #selector(handleCopy), name: UIPasteboard.changedNotification, object: nil)

@objc func handleCopy(sender: NSNotification) {
    // Handle new pasteboard
    print("pasteboard changed: \(UIPasteboard.general.items.first)")
}

Don't forget to add @objc to your handler so the method is visible to the objective-C selector.

0
On

If someone is interested in the Xamarin/C# version:

NSNotificationCenter.DefaultCenter.AddObserver(UIPasteboard.ChangedNotification, 
            notification => { 
                // custom code here
            });