В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Я обнаружил, что когда я (как пользователь приложения) копирует богатый текст из UITextView в картотеку, картон содержит два типа:
"public.text",
"Apple Web Archive pasteboard type
Исходя из этого, я создал удобная категория на UIP борту. (С большим использованием кода из этот ответ ).
Он работает, но: преобразование в формат html означает, что я потеряю пользовательские атрибуты. Любое чистое решение будет с радостью принято.
Файл UIPasteboard + AttributedString.h:
@interface UIPasteboard (AttributedString)
- (void) setAttributedString:(NSAttributedString *)attributedString;
@end
Файл UIPastboard + AttributedString.m:
#import <MobileCoreServices/UTCoreTypes.h>
#import "UIPasteboard+AttributedString.h"
@implementation UIPasteboard (AttributedString)
- (void) setAttributedString:(NSAttributedString *)attributedString {
NSString *htmlString = [attributedString htmlString]; // This uses DTCoreText category NSAttributedString+HTML - https://github.com/Cocoanetics/DTCoreText
NSDictionary *resourceDictionary = @{ @"WebResourceData" : [htmlString dataUsingEncoding:NSUTF8StringEncoding],
@"WebResourceFrameName": @"",
@"WebResourceMIMEType" : @"text/html",
@"WebResourceTextEncodingName" : @"UTF-8",
@"WebResourceURL" : @"about:blank" };
NSDictionary *htmlItem = @{ (NSString *)kUTTypeText : [attributedString string],
@"Apple Web Archive pasteboard type" : @{ @"WebMainResource" : resourceDictionary } };
[self setItems:@[ htmlItem ]];
}
@end
Только реализованный сеттер. Если вы хотите написать геттер и / или поместить его на GitHub, будьте моим гостем:)
Подход Гийома, использующий HTML, не работает для меня (по крайней мере, в iOS 7.1 beta 5).
Чистое решение заключается в том, чтобы вставить NSAttributedStrings в виде RTF (плюс резервное копирование с открытым текстом) в палитру:
- (void)setAttributedString:(NSAttributedString *)attributedString {
NSData *rtf = [attributedString dataFromRange:NSMakeRange(0, attributedString.length)
documentAttributes:@{NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType}
error:nil];
self.items = @[@{(id)kUTTypeRTF: [[NSString alloc] initWithData:rtf encoding:NSUTF8StringEncoding],
(id)kUTTypeUTF8PlainText: attributedString.string}];
}
Swift 2.3
public extension UIPasteboard {
public func set(attributedString: NSAttributedString?) {
guard let attributedString = attributedString else {
return
}
do {
let rtf = try attributedString.dataFromRange(NSMakeRange(0, attributedString.length), documentAttributes: [NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType])
items = [[kUTTypeRTF as String: NSString(data: rtf, encoding: NSUTF8StringEncoding)!, kUTTypeUTF8PlainText as String: attributedString.string]]
} catch {
}
}
}
Swift 3
import MobileCoreServices
public extension UIPasteboard {
public func set(attributedString: NSAttributedString?) {
guard let attributedString = attributedString else {
return
}
do {
let rtf = try attributedString.data(from: NSMakeRange(0, attributedString.length), documentAttributes: [NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType])
items = [[kUTTypeRTF as String: NSString(data: rtf, encoding: String.Encoding.utf8.rawValue)!, kUTTypeUTF8PlainText as String: attributedString.string]]
} catch {
}
}
}
Менеджер картона в OSX может автоматически конвертировать между большим количеством текстовых и графических типов.
Для богатых текстовых типов вы обычно помещаете RTF в картон. Вы можете создать RTF-представление из атрибутной строки и наоборот. См. «Ссылка на дополнения набора приложений NSAttributedString».
Если у вас есть изображения, включенные также, используйте RTFd вместо флейта RTF.
Я не знаю типы MIME для (я привык к API Carbon Pasteboard, а не к Cocoa), но вы можете конвертировать между UTI, Pboard и MIME-типами с использованием API UTType.
UTI для RTF является «public.rtf» , для RTFd это «com.apple.flat-rtfd».
Это довольно просто:
#import <MobileCoreServices/UTCoreTypes.h>
NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
NSData *rtf = [attributedString dataFromRange:NSMakeRange(0, attributedString.length)
documentAttributes:@{NSDocumentTypeDocumentAttribute: NSRTFDTextDocumentType}
error:nil];
if (rtf) {
[item setObject:rtf forKey:(id)kUTTypeFlatRTFD];
}
[item setObject:attributedString.string forKey:(id)kUTTypeUTF8PlainText];
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.items = @[item];