Основное использование iPhone в картоне - PullRequest
6 голосов
/ 28 июня 2009

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

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

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

Ответы [ 3 ]

19 голосов
/ 15 июля 2009

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

#import <MobileCoreServices/UTCoreTypes.h>

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

8 голосов
/ 29 июня 2009

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

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

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

Я проводил тестирование, щелкая текстовое поле и проверяя, появится ли всплывающее окно.

Я до сих пор не уверен, где в документах объясняются типы UTT для iPhone, в том числе где их получить (Framework, #include файлы), кажется, что документ «Обзор унифицированных идентификаторов типов» все еще ориентирован Mac OS Так как константы дали мне предупреждение о несоответствии типов, я подумал, что делаю что-то не так, поэтому сначала я попытался использовать литерал NSString.

3 голосов
/ 25 октября 2012

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

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

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

...