另一種可能性是使用你要隱藏的文本的自定義屬性,然後寫自己方法在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;
}
警告:這完全是我寫這個了我的頭頂部,它不能保證編譯,工作,點燃火你的硬盤驅動器,而不是踢你的狗,等
這生成適合繪製的字符串,但仍然需要原始字符串來訪問任何隱藏文本。根據你的字符串的大小,這可能是一個很大的內存開銷。
糟糕,應該是第一行的NSMutableAttributedString。正如我所說的,這還沒有經過測試:-) – Alex 2009-06-04 14:20:00
應該提到你的解決方案和我的區別:你的代碼真的用'MyHiddenTextAttribute'去除了字符,而我的解決方案在標記的Range處留下空格。 – 2009-06-04 16:00:49