Pregunta

Estoy tratando de poner un texto plano en el iPhone Pasteboard. El siguiente código no parece funcionar:

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

Supongo que el problema está en el argumento de tipo PasteBoard. Al pasar @"public.plain-text" no pasa nada. Al pasar kUTTypePlainText el compilador se queja de un tipo de puntero incompatible, pero no se bloquea y tampoco sucede nada. El uso de MobileCoreServices también parece requerir la vinculación con <=>, que no se menciona en los documentos.

¿Fue útil?

Solución 2

Respondiendo a los comentarios y mi propia pregunta:

  • Establecer la propiedad de cadena pasteboard funciona.
  • Usar setValue:forPasteboardType: también funciona si uso kUTTypeUTF8PlainText en lugar de kUTTypePlainText para el tipo de cartón.

No me había dado cuenta de la propiedad de cadena porque fui directamente a la sección de tareas " Obtención y configuración de elementos de cartón individuales " .

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

Todavía no estoy seguro de dónde en los documentos se explican los tipos de UTT para el iPhone, incluido dónde obtenerlos (Marco, #include archivos), parece que el " Descripción general de los identificadores de tipo uniforme quot; doc todavía está orientado a Mac OS. Dado que las constantes me dieron una advertencia de falta de coincidencia de tipos, pensé que estaba haciendo algo mal, es por eso que primero intenté usar un NSString literal.

Otros consejos

Use este encabezado para obtener el valor de kUTTypeUTF8PlainText;

#import <MobileCoreServices/UTCoreTypes.h>

Deberá tener disponible el marco MobileCoreServices.

Aquí están mis experimentos con pegar texto en el cartón. Estoy usando un botón para agregar el texto mediante programación.

#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 verificarlo, y cambié el contenido del texto cada vez para asegurarme de que no solo se estuviera reutilizando la pasta anterior.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top