Copie y pegue en iPhone con múltiples representaciones de datos
-
06-07-2019 - |
Pregunta
Encontré algunos problemas al intentar colocar más de una representación de datos en el tablero en el iPhone 3.0.
Lo que intento hacer es poner una representación de datos y una representación de cadena en el cartón. Los datos son mi propio tipo de datos y los uso para copiar y pegar en mi aplicación. La representación de cadena es una forma de copiar y pegar el contenido de mi aplicación como un esquema en otra aplicación (por ejemplo, Mail.app).
// payload
NSString *pasteboardString = [selectedNode stringRepresentation];
NSDictionary *pasteboardDictionary = [selectedNode nodeAndSubnodesProperties];
// set payload
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.string = pasteboardString;
[pasteboard setValue:pasteboardDictionary forPasteboardType:MNTNodesPasteboardType];
El código anterior no funciona porque la propiedad de cadena y setValue: forPasteboardType: methode reemplaza la primera representación en el cartón. Intenté addItems: pero no funcionó para mí.
¡Gracias por cualquier ayuda!
Solución
Para responder mi propia pregunta:
Debe usar la propiedad de elementos para colocar múltiples representaciones en el tablero. Para hacerlo, cree un diccionario con cada representación como valor y el tipo de representación como clave. Agregue este diccionario a una matriz, donde cada elemento de la matriz representa un elemento (UIPasteboard admite agregar múltiples elementos a la mesa de trabajo, así como agregar representación múltiple a cada elemento).
Código de ejemplo para un solo elemento con dos representaciones:
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
NSMutableDictionary *item = [NSMutableDictionary dictionaryWithCapacity:2];
[item setValue:[NSKeyedArchiver archivedDataWithRootObject:pasteboardDictionary] forKey:MNTNodesPasteboardType];
[item setValue:pasteboardString forKey:(NSString *)kUTTypeUTF8PlainText];
pasteboard.items = [NSArray arrayWithObject:item];
No olvide vincular con el marco MobileCoreServices para resolver la constante de UTI.
Otros consejos
esto es lo que funcionó para mí en Swift pega una imagen y un texto juntos en el tablero
let pastebaord = UIPasteboard.generalPasteboard()
let image = UIImage(named: "my-image-file")
pastebaord.addItems([ [UIPasteboardTypeListString[0] as! String : "hello"], [UIPasteboardTypeListImage[0] as! String: image!]])