我觉得自己像个白痴,甚至没有发布一些代码,但是在阅读了几篇说明 iOS7 Text Kit 添加了对文本折叠的支持的文章之后,我实际上找不到任何示例代码或在文本上设置的属性来折叠它,Apple 的文档似乎对它静音。
http://asciiwwdc.com/2013/sessions/220让我觉得我将一个文本区域设置到它自己的文本容器中,然后显示/隐藏它,也许是通过覆盖 setTextContainer:forGlyphRange:
我在附近吗?
谢谢
我觉得自己像个白痴,甚至没有发布一些代码,但是在阅读了几篇说明 iOS7 Text Kit 添加了对文本折叠的支持的文章之后,我实际上找不到任何示例代码或在文本上设置的属性来折叠它,Apple 的文档似乎对它静音。
http://asciiwwdc.com/2013/sessions/220让我觉得我将一个文本区域设置到它自己的文本容器中,然后显示/隐藏它,也许是通过覆盖 setTextContainer:forGlyphRange:
我在附近吗?
谢谢
当他们进行自定义文本截断时,有一个 WWDC 2013 视频谈到了它。基本上你实现了 NSLayoutManagerDelegate 方法layoutManager: shouldGenerateGlyphs: properties: characterIndexes: font: forGlyphRange:
我花了太多的精力来实际想出代码,但这是我基于属性的实现hideNotes
-(NSUInteger)layoutManager:(NSLayoutManager *)layoutManager shouldGenerateGlyphs:(const CGGlyph *)glyphs
properties:(const NSGlyphProperty *)props characterIndexes:(const NSUInteger *)charIndexes
font:(UIFont *)aFont forGlyphRange:(NSRange)glyphRange {
if (self.hideNotes) {
NSGlyphProperty *properties = malloc(sizeof(NSGlyphProperty) * glyphRange.length);
for (int i = 0; i < glyphRange.length; i++) {
NSUInteger glyphIndex = glyphRange.location + i;
NSDictionary *charAttributes = [_textStorage attributesAtIndex:glyphIndex effectiveRange:NULL];
if ([[charAttributes objectForKey:CSNoteAttribute] isEqualToNumber:@YES]) {
properties[i] = NSGlyphPropertyNull;
} else {
properties[i] = props[i];
}
}
[layoutManager setGlyphs:glyphs properties:properties characterIndexes:charIndexes font:aFont forGlyphRange:glyphRange];
return glyphRange.length;
}
[layoutManager setGlyphs:glyphs properties:props characterIndexes:charIndexes font:aFont forGlyphRange:glyphRange];
return glyphRange.length;
}
NSLayoutManager 方法setGlyphs: properties: characterIndexes: font: forGlyphRange:
在默认实现中被调用,基本上完成了所有的工作。返回值是实际生成的字形数量,返回 0 告诉布局管理器执行其默认实现,所以我只返回它传入的字形范围的长度。方法的主要部分遍历所有字符文本存储,如果它具有某个属性,则将关联的属性设置为 NSGlyphPropertyNull,这会告诉布局管理器不显示它,否则它只是将属性设置为为其传递的任何内容。