7

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?

chewy
  • 8,207
  • 6
  • 42
  • 70
  • 1
    have you check these notifications:http://stackoverflow.com/questions/4240087/receiving-uipasteboard-generalpasteboard-notification-while-in-the-background ? – Michał Zygar Jan 20 '12 at 13:15

3 Answers3

16

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

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

NSNotificationCenter.DefaultCenter.AddObserver(UIPasteboard.ChangedNotification, 
            notification => { 
                // custom code here
            });
Karim El Jed
  • 133
  • 6
0

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.

soundflix
  • 928
  • 9
  • 22