別の可能性は、非表示にしたいテキスト上のカスタム属性を使用することで、その後、自分自身を記述しますメソッドをNSAttributedString
のカテゴリに追加し、hiddenとしてマークされたテキストを除外する新しい属性付き文字列を作成します。
- (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;
}
警告:など、私は完全にちょうど私の頭の上にこれをオフに書いた、そしてコンパイルする保証はありませんが、仕事、火の上のハードドライブを点灯、あなたの犬を蹴るない、
これでしょう描画に適した文字列を生成しますが、隠しテキストにアクセスするには元の文字列が必要になります。文字列のサイズによっては、メモリオーバーヘッドが大きくなる可能性があります。
おっと、に隠されたテキストのフォントサイズを設定することです。私の言ったように、これはテストされていません:-) – Alex
あなたのソリューションと私の違いについて言及する必要があります:あなたのコードは実際にはMyHiddenTextAttributeで文字を削除します。 –
はい、このコードは表示にのみ適した文字列を作成することに注意してください。元の質問では、CSS表示:なし属性のようなものがありました。このメソッドで生成された文字列を描画すると、同様の効果が得られます。 – Alex