2009-06-28 8 views
6

Ich versuche, ein paar Klartext in der iPhone-Pappe zu setzen. Der folgende Code scheint nicht zu funktionieren:Basic iPhone Pasteboard Verwendung

UIPasteboard *pboard = [UIPasteboard generalPasteboard]; 
NSString *value = @"test"; 
[pboard setValue: value forPasteboardType: @"public.plain-text"]; 

ich das Problem bin zu raten, ist in dem Einfügeablage Typargument. Passing @"public.plain-text" passiert nichts. Übergeben kUTTypePlainText beschwert sich der Compiler über inkompatiblen Zeigertyp, aber nicht abstürzt, und nichts passiert auch nicht. Die Verwendung von kUTTypePlainText scheint auch eine Verknüpfung mit MobileCoreServices zu erfordern, die in der Dokumentation nicht erwähnt wird.

+2

Kann ich fragen, warum Sie das tun, anstatt die Methode - [UIPasteboard setString:] zu verwenden? Was meinst du mit "nichts passiert?" Was hast du genau erwartet? Wie bestimmen Sie das? –

Antwort

8

zu reagieren, die Kommentare und meine eigene Frage:

  • Einstellung der pasteboard String-Eigenschaft funktioniert.
  • Die Verwendung von setValue:forPasteboardType: funktioniert auch, wenn ich kUTTypeUTF8PlainText anstelle von kUTTypePlainText für den Pasteboard-Typ verwenden.

ich die String-Eigenschaft nicht bemerkt hatte, weil ich direkt an die ging „Getting und Einstellung Einzelpappen Items“ Aufgaben Abschnitt.

Die Art und Weise, wie ich getestet habe, war, indem ich in ein Textfeld klickte und sah, ob das Einfüge-Popup auftauchte.

Ich bin immer noch nicht sicher, wo in den Docs die UTT-Typen für das iPhone erklärt werden, einschließlich wo sie (Framework, #include Dateien) zu bekommen, scheint es, dass die "Uniform Type Identifiers Overview" -Doc immer noch auf Mac ausgerichtet ist OS. Da die Konstanten mir eine Art Mismatch-Warnung gaben, dachte ich, dass ich etwas falsch mache, deshalb habe ich zuerst versucht, ein NSString Literal zu verwenden.

+1

Es hat nichts damit zu tun, dass es auf Mac OS X ausgerichtet ist, wie ich bereits erklärt habe, man muss nur die Zeichenfolge umwandeln. Die Konstanten werden als CFStringRef deklariert, das mit NSString geboolfrei ist. Just do: (NSString *) kUTTypePlainText –

19

Verwenden Sie diese Überschrift, um den Wert für kUTTypeUTF8PlainText zu erhalten;

#import <MobileCoreServices/UTCoreTypes.h> 

Sie müssen das MobileCoreServices-Framework verfügbar haben.

+3

Die Umsetzung nur um es klar: '[pboard setValue: Wert forPasteboardType: (NSString *) kUTTypeUTF8PlainText];' –

3

Hier sind meine Experimente mit dem Einfügen von Text auf der Pasteboard. Ich verwende eine Schaltfläche, um den Text programmatisch hinzuzufügen.

#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]); 
} 

klebte ich den Inhalt in einem Textfeld zu überprüfen und ändern die Textinhalte jedes Mal, es sicher zu machen, war nicht nur die vorherige Paste wiederverwenden.

+0

was soll ich tun, wenn ich ein Bild eingefügt werden soll? – Ramakrishna