もう1つの可能性は、非表示にするテキストにカスタム属性を使用してから、非表示NSAttributedString
としてマークされたテキストを除外する新しい属性文字列を作成するカテゴリに独自のメソッドを作成することです。
- (NSAttributedString *)attributedStringWithoutHiddenText {
NSMutableAttributedString *result = [[[NSMutableString alloc] init] autorelease];
NSRange fullRange = NSMakeRange(0, [self length]);
NSRange range = NSZeroRange;
while (NSMaxRange(range) < [self length]) {
NSDictionary *attributes = [self attributesAtIndex:range.location longestEffectiveRange:&range inRange:fullRange];
if ([[attributes objectForKey:MyHiddenTextAttribute] boolValue])
continue;
NSAttributedString *substring = [[NSAttributedString alloc] initWithString:[[self string] substringWithRange:range] attributes:attributes];
[result appendAttributedString:substring];
[substring release];
}
return result;
}
警告:私はこれを頭のてっぺんから書き留めただけで、コンパイル、動作、ハードドライブの火をつけたり、犬を蹴ったりすることは保証されていません。
これにより、描画に適した文字列が生成されますが、非表示のテキストにアクセスするには、元の文字列が必要です。文字列のサイズによっては、これは大きなメモリオーバーヘッドになる可能性があります。