2009-06-28 11 views
6

Estoy tratando de poner algo de texto sin formato en la tarjeta de trabajo de iPhone. El siguiente código no parece funcionar:Uso básico del cartón para embalaje

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

Supongo que el problema está en el argumento del tipo PasteBoard. Pasando @"public.plain-text" no pasa nada. Al pasar kUTTypePlainText, el compilador se queja de un tipo de puntero incompatible, pero no falla, y tampoco ocurre nada. El uso de kUTTypePlainText también parece requerir el enlace con MobileCoreServices, que no se menciona en los documentos.

+2

¿Puedo preguntar por qué está haciendo esto en lugar de usar el método - [UIPasteboard setString:]? Además, ¿a qué te refieres con "no pasa nada"? ¿Qué esperabas que sucediera exactamente? ¿Cómo estás determinando esto? –

Respuesta

8

respuesta a las observaciones y mi propia pregunta:

  • Configuración de las obras de propiedad pasteboard cadena.
  • El uso de setValue:forPasteboardType: también funciona si utilizo kUTTypeUTF8PlainText en lugar de kUTTypePlainText para el tipo de cartón.

que no había notado la propiedad de cadena porque fui directamente a la "Obtención y establecimiento de cartón individual Items" sección tareas.

La manera en que estaba probando era haciendo clic en un campo de texto y ver si aparecía la ventana emergente pegar.

Todavía no estoy seguro de dónde se explican los tipos de UTT para el iPhone, incluso dónde obtenerlos (Framework, #include archivos), parece que el documento "Uniform Type Identifiers Overview" todavía está orientado hacia Mac OS. Como las constantes me dieron una advertencia de desajuste de tipo, pensé que estaba haciendo algo mal, por eso primero intenté usar un literal NSString.

+1

No tiene nada que ver con estar orientado hacia Mac OS X, como expliqué, solo necesita lanzar la cadena. Las constantes se declaran como CFStringRef, que es tollfree puenteado con NSString. Solo hazlo: (NSString *) kUTTypePlainText –

19

Utilice este encabezado para obtener el valor de kUTTypeUTF8PlainText;

#import <MobileCoreServices/UTCoreTypes.h> 

Deberá tener disponible la infraestructura de MobileCoreServices.

+3

La implementación solo para que quede claro: '[pboard setValue: value forPasteboardType: (NSString *) kUTTypeUTF8PlainText];' –

3

Aquí están mis experimentos con pegar texto en la mesa de trabajo. Estoy usando un botón para agregar el texto programáticamente.

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

Pegué el contenido en un campo de texto para comprobar, y le cambió el contenido de texto cada vez para asegurarse de que no se acaba de volver a usar la pasta anterior.

+0

¿Qué debo hacer si quiero pegar una imagen? – Ramakrishna