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!

Foi útil?

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!]]) 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top