Uso básico de cartón de iPhone
-
20-08-2019 - |
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.
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 usokUTTypeUTF8PlainText
en lugar dekUTTypePlainText
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.