Reputation: 1001
I'm trying to put some plain text in the iPhone Pasteboard. The following code doesn't seem to work:
UIPasteboard *pboard = [UIPasteboard generalPasteboard];
NSString *value = @"test";
[pboard setValue: value forPasteboardType: @"public.plain-text"];
I'm guessing the problem is in the PasteBoard type argument. Passing @"public.plain-text"
nothing happens. Passing kUTTypePlainText
the compiler complains about incompatible pointer type, but doesn't crash, and nothing happens either. Using kUTTypePlainText
also seems to require linking with MobileCoreServices
, which is not mentioned in the docs.
Upvotes: 6
Views: 11524
Reputation: 1001
Responding to the comments and my own question:
pasteboard
string property works.setValue:forPasteboardType:
also works if I use kUTTypeUTF8PlainText
instead of kUTTypePlainText
for the pasteboard type.I had not noticed the string property because I went directly to the "Getting and Setting Single Pasteboard Items" tasks section.
The way I was testing was by clicking in a text field and see if the paste pop-up would appear.
I still am not sure where in the docs the UTT types are explained for the iPhone, including where to get them (Framework, #include
files), it seems that the "Uniform Type Identifiers Overview" doc is still geared toward Mac OS. Since the constants gave me a type mismatch warning I thought I was doing something wrong, that's why I first tried using an NSString
literal.
Upvotes: 8
Reputation: 113747
Here's my experiments with pasting text onto the pasteboard. I'm using a button to add the text programatically.
#import <MobileCoreServices/MobileCoreServices.h>
- (IBAction)setPasteboardText:(id)sender
{
UIPasteboard *pb = [UIPasteboard generalPasteboard];
NSString *text = @"東京京都大阪";
// Works, but generates an incompatible pointer warning
[pb setValue:text forPasteboardType:kUTTypeText];
// Puts generic item (not text type), can't be pasted into a text field
[pb setValue:text forPasteboardType:(NSString *)kUTTypeItem];
// Works, even with non-ASCII text
// I would say this is the best way to do it with unknown text
[pb setValue:text forPasteboardType:(NSString *)kUTTypeText];
// Works without warning
// This would be my preferred method with UTF-8 text
[pb setValue:text forPasteboardType:(NSString *)kUTTypeUTF8PlainText];
// Works without warning, even with Japanese characters
[pb setValue:text forPasteboardType:@"public.plain-text"];
// Works without warning, even with Japanese characters
[pb setValue:text forPasteboardType:@"public.text"];
// Check contents and content type of pasteboard
NSLog(@"%@", [pb items]);
}
I pasted the contents into a text field to check, and changed the text contents each time to make sure it wasn't just re-using the previous paste.
Upvotes: 3
Reputation: 409
Use this header to get the value for kUTTypeUTF8PlainText;
#import <MobileCoreServices/UTCoreTypes.h>
You'll need to have the MobileCoreServices framework available.
Upvotes: 19