Копирование и вставка на iPhone с несколькими представлениями данных - PullRequest
9 голосов
/ 23 июня 2009

Я столкнулся с некоторыми проблемами при попытке поместить более одного представления данных на монтажную панель на iPhone 3.0.

То, что я пытаюсь сделать, это поместить представление данных и строковое представление на монтажную панель. Данные - это мой собственный тип данных, и я использую его для копирования и вставки в моем приложении. Строковое представление - это способ скопировать и вставить содержимое моего приложения в виде схемы в другое приложение (например, 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];

Приведенный выше код не работает, потому что свойство string и setValue: forPasteboardType: methodde заменяют первое представление на монтажном столе. Я попробовал addItems: но у меня это не сработало.

Спасибо за любую помощь!

Ответы [ 2 ]

16 голосов
/ 03 июля 2009

Чтобы ответить на мой вопрос:

Вы должны использовать свойство items, чтобы поместить несколько представлений в область монтажа. Для этого вы создаете словарь с каждым представлением в качестве значения и типом представления в качестве ключа. Добавьте этот словарь в массив, где каждый элемент в массиве представляет элемент (UIPasteboard поддерживает добавление нескольких элементов в монтажную панель, а также добавление представления с множеством элементов для каждого элемента).

Пример кода для одного элемента с двумя представлениями:

    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];

Не забудьте связать с платформой MobileCoreServices для разрешения константы UTI.

0 голосов
/ 28 августа 2016

это то, что у меня сработало в Swift он вставляет изображение и текст вместе в макет

let pastebaord = UIPasteboard.generalPasteboard()
let image = UIImage(named: "my-image-file")
pastebaord.addItems([ [UIPasteboardTypeListString[0] as! String : "hello"], [UIPasteboardTypeListImage[0] as! String: image!]]) 
...