2009-06-28 2 views
6

Я пытаюсь поместить некоторый простой текст в карточку iPhone. Следующий код не работает:Основное использование картона iPhone

UIPasteboard *pboard = [UIPasteboard generalPasteboard]; 
NSString *value = @"test"; 
[pboard setValue: value forPasteboardType: @"public.plain-text"]; 

Я предполагаю, что проблема заключается в аргументе типа PasteBoard. Пройдя @"public.plain-text", ничего не происходит. Передавая kUTTypePlainText, компилятор жалуется на несовместимый тип указателя, но не падает, и ничего не происходит. Использование kUTTypePlainText также, по-видимому, требует связывания с MobileCoreServices, что не упоминается в документах.

+2

Могу ли я спросить, почему вы это делаете, вместо метода - [UIPasteboard setString:]? Кроме того, что вы подразумеваете под «ничего не происходит»? Чего вы ожидали точно? Как вы это определяете? –

ответ

8

В ответ на замечания и мой собственный вопрос:

  • Установка pasteboard строки работает свойство.
  • Использование setValue:forPasteboardType: также работает, если я использую kUTTypeUTF8PlainText вместо kUTTypePlainText для картона.

я не заметил свойство строки, потому что я пошел прямо к «Получение и установка одного Гипсокартонные элементов» задачи раздела.

То, что я тестировал, было нажатием текстового поля и посмотреть, появится ли всплывающее окно.

Я все еще не уверен, где в документах объясняются типы UTT для iPhone, в том числе, где их получить (Framework, #include файлов), похоже, что документ «Единый идентификатор идентификаторов типов» по-прежнему ориентирован на Mac ОПЕРАЦИОННЫЕ СИСТЕМЫ. Поскольку константы дали мне предупреждение о несоответствии типа, я думал, что делаю что-то неправильно, поэтому я сначала попытался использовать литерал NSString.

+1

Это не имеет никакого отношения к тому, чтобы быть ориентированным на Mac OS X, как я объяснил, вам просто нужно наложить строку. Константы объявляются как CFStringRef, который беспошлинно соединяется с NSString. Просто выполните: (NSString *) kUTTypePlainText –

19

Используйте этот заголовок, чтобы получить значение для kUTTypeUTF8PlainText;

#import <MobileCoreServices/UTCoreTypes.h> 

Вам необходимо иметь доступную инфраструктуру MobileCoreServices.

+3

Реализация, чтобы сделать ее кристально чистой: '[pboard setValue: значение forPasteboardType: (NSString *) kUTTypeUTF8PlainText];' –

3

Вот мои эксперименты с вставкой текста на картон. Я использую кнопку для добавления текста программно.

#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]); 
} 

Я скопировал содержимое в текстовое поле, чтобы проверить, и изменять текстовое содержимое каждый раз, чтобы убедиться, что это не просто повторно использовать предыдущую пасту.

+0

Что мне делать, если я хочу вставить изображение? – Ramakrishna

Смежные вопросы