假设您使用的是NSAttributedString
. 请查看下面的此链接,以查看有关如何搜索与文本关联的特定属性的示例。
这些示例都不会真正创建自定义属性,但您可以看到我们如何搜索每个字体属性并更改字体大小。附加自定义属性后,您将能够进行类似的操作。如果您遇到困难,请告诉我,我可以尝试为您破解更具体的内容。
http://ossh.com.au/design-and-technology/software-development/implementing-rich-text-with-images-on-os-x-and-ios/
具体查看OSTextView.m
该方法的源列表文件resizeText
。这是一些搜索 NSFont 属性的代码
[self.textStorage enumerateAttributesInRange:rangeAll options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired usingBlock:
^(NSDictionary *attributes, NSRange range, BOOL *stop) {
// Iterate over each attribute and look for a Font Size
[attributes enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if ([[key description] isEqualToString:@"NSFont"]) {
UIFont *font = obj;
float fontSize = font.pointSize + bySize;
smallestFontSize = MIN(smallestFontSize, fontSize);
largestFontSize = MAX(largestFontSize, fontSize);
}
}];
}];
该方法的进一步下方是替换 NSFont 属性的代码,在您的情况下,您可以添加自定义属性 - 请注意,我们首先复制现有属性,然后添加到它们,因为您可能不想删除任何现有属性。
[self.textStorage enumerateAttributesInRange:rangeAll options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired usingBlock:
^(NSDictionary *attributes, NSRange range, BOOL *stop) {
NSMutableDictionary *mutableAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
// Iterate over each attribute and look for a Font Size
[mutableAttributes enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if ([[key description] isEqualToString:@"NSFont"]) {
UIFont *font = obj;
float fontSize = font.pointSize;
fontSize += bySize;
fontSize = MIN(fontSize, MAXFONTSIZE);
// Get a new font with the same attributes and the new size
UIFont *newFont = [font fontWithSize:fontSize];
// Replace the attributes, this overrides whatever is already there
[mutableAttributes setObject:newFont forKey:key];
}
}];
// Now replace the attributes in ourself (UITextView subclass)
[self.textStorage setAttributes:mutableAttributes range:range];
}];
现在,您的自定义属性已巧妙地嵌入到属性字符串中,您应该能够对其进行归档和取消归档而不会丢失它。