Я пытаюсь имитировать поведение монтажного стола приложений iOS Pages и Keynote. Короче говоря, позволяя вставлять базовое форматирование текста NSAttributedString (то есть BIU) в UITextView, но не изображения, HTML и т. Д.
РЕЗЮМЕ ПОВЕДЕНИЯ
- Если вы скопируете форматированный текст из приложения Notes, Evernote или текст и изображения с веб-сайта, Pages вставит только текстовую строку.
- Если вы скопируете форматированный текст из Pages или Keynote, он вставит форматированный текст в другое место в Pages, Keynote и т. Д.
- Нежелательным последствием, но, возможно, важным, что следует признать, является то, что ни приложение Notes, ни Evernote не будут вставлять форматированный текст, скопированный из Pages или Keynote. Я предполагаю, что несоответствие между приложениями заключается в использовании NSAttributedStrings по сравнению с HTML?
Как это достигается? В Mac OS, похоже, вы можете попросить монтажный стол вернуть разные типы самого себя, предоставить как форматированный текст, так и строковое представление, а также использовать форматированный текст по желанию. К сожалению, readObjectsForClasses для iOS не существует. Тем не менее, я могу видеть в журнале, что iOS действительно имеет тип монтажного стола, связанный с RTF, благодаря этому сообщению. Однако я не могу найти способ запросить версию содержимого монтажного стола NSAttributedString, чтобы я мог установить приоритет для вставки.
ФОН
У меня есть приложение, которое позволяет редактировать базовое форматирование текста NSAttributedString (то есть полужирный, курсив, подчеркивание) текста в UITextViews. Пользователи хотят скопировать текст из других приложений (например, веб-страницу в Safari, текст в приложении Notes), чтобы вставить его в UITextView в моем приложении. Разрешение работы монтажного стола по умолчанию означает, что я могу получить цвета фона, изображения, шрифты и т. Д., Которые мое приложение не предназначено для обработки. Пример ниже показывает текст, как выглядит скопированный текст с цветом фона при вставке в UITextView моего приложения.
Я могу преодолеть 1, создав подкласс UITextView
- (void)paste:(id)sender
{
UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
NSString *string = pasteBoard.string;
NSLog(@"Pasteboard string: %@", string);
[self insertText:string];
}
Непредвиденным последствием является потеря возможности сохранять форматирование текста, скопированного из моего приложения. Пользователи могут захотеть скопировать текст из одного UITextView в моем приложении и вставить его в другой UITextView в моем приложении. Они ожидают, что форматирование (т. Е. Жирный шрифт, курсив, подчеркивание) будет сохранено.
Понимание и предложения приветствуются.