Copiar e colar no iPhone com várias representações de dados
-
06-07-2019 - |
Pergunta
Eu encontrei alguns problemas ao tentar colocar mais de uma representação de dados para a área de transferência no iPhone 3.0.
O que eu estou tentando fazer é colocar uma representação de dados e uma representação de cadeia para a área de transferência. Os dados são meu próprio tipo de dados e eu usá-lo para copiar e colar no meu aplicativo. A representação da cadeia é uma maneira de copiar e colar o conteúdo do meu aplicativo como um esboço em um outro aplicativo (por exemplo 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];
O código acima não funciona porque a propriedade de cordas e setValue: forPasteboardType: methode substituir a primeira representação na área de trabalho. Tentei addItems: mas não funcionou para mim
.Obrigado por qualquer ajuda!
Solução
Para responder a minha própria pergunta:
Você tem que utilizar a propriedade itens para colocar múltiplas representações para a área de transferência. Para fazer isso você cria um dicionário com cada representação como o valor eo tipo de representação como a chave. Adicionar este dicionário para uma matriz, em que cada elemento da matriz representa um item (UIPasteboard suportes adicionando vários itens para a área de trabalho, bem como a adição de representação Mutliple para cada item).
Exemplo de código para um único item com duas representações:
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];
Não se esqueça de ligação com as MobileCoreServices quadro para resolver a constante UTI.
Outras dicas
isto é o que funcionou para mim em Swift ele cola tanto uma imagem e texto juntos para o pastboard
let pastebaord = UIPasteboard.generalPasteboard()
let image = UIImage(named: "my-image-file")
pastebaord.addItems([ [UIPasteboardTypeListString[0] as! String : "hello"], [UIPasteboardTypeListImage[0] as! String: image!]])