Подход Гийома, использующий 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 {
}
}
}
Этот учебник помог мне найти решение.
Сначала добавьте выбранные фильтры в список массивов:
myFiltersList = [ "vintage", "filter331" ];
Для каждого элемента вы должны создать Caman Работайте и проверяйте, содержится ли каждый фильтр списка (текстовое значение) в библиотеке Caman.js (имя функции). Я использовал:
if( array[i] in this) statement
Это проверило бы текстовое значение фильтра, если бы он содержал в этом , что в данном случае Caman.js. Будьте осторожны, что . Это вы должны использовать, чтобы сделать эту работу.
if(filtersList[i] in this) //in this = in Caman.js
После проверки, существует ли фильтр, фильтр должен быть подготовлен сначала в определенном синтаксическом порядке:
this[ filtersList[i] ] (); //or this["vintage"](); or this.vintage();
Дон забудь сделать ():
this.render();
//For each filter in the list
myFiltersList.forEach( function() {
//Open Caman Function and Reference the 2D canvas
Caman('#myCanvas', function () {
//Check if the current filter is declared within the library Caman.js
if(myFiltersList[i] in this){
alert("filter in the list");
//Add filter from this as filter in Caman function/
this[myFiltersList[i]]().render();
i++; //Increase counter
}else{
alert("filter not in the list");
}
});
});
[ 1127] Корпус "винтаж":
alert("filter in the list");
this[myFiltersList[i]]().render();
i++;
Корпус "filter331":
alert("filter not in the list");