我正在尝试实现文本折叠效果,以根据文本存储中的属性隐藏 UITextView 中的一些文本,然后在layoutManager: shouldGenerateGlyphs: properties: characterIndexes: font:(UIFont *)aFont forGlyphRange:(NSRange)glyphRange
方法中将这些字形属性设置为 NSGlyphPropertyNull。到目前为止,该部分工作得很好,并且完成了预期的工作。问题是当我尝试强制文本视图的布局管理器重新布局文本时。我试过调用所有的无效方法,但只有一个有效,invalidateGlyphsForCharacterRange: changeInLength: actualCharacterRange:
. 我传入了整个字符范围,changeInLength 为 0,因为我实际上没有更改任何内容,而 actualCharacterRange 为 NULL。每隔一段时间,这工作得很好。但大多数时候我得到这个错误,Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The index -4097 is invalid'
. 这有什么问题?这是我的一些代码:
-(IBAction)showHideNotes:(id)sender {
self.hideNotes = !self.hideNotes;
[self.textView.layoutManager invalidateGlyphsForCharacterRange:NSMakeRange(0, _textStorage.string.length) changeInLength:0 actualCharacterRange:NULL];
[self.textView setNeedsLayout];
}
基本上我的目标是当用户点击一个按钮时,文本将因此折叠或展开。在 UILayoutManagerDelegate 方法中layoutManager: shouldGenerateGlyphs: properties: characterIndexes: font: forGlyphRange:
,我将我想要隐藏的字形设置为 NSGlyphPropertyNull 仅self.hidden
当YES