我有一个可可应用程序与保存在它的一个NSTextView(实际上我相信这是一个NSAttributedString)文本的NSMutableAttributedString控制。我可以很容易地设置和修改不同的文字属性(例如字体,下划线等)在不同的字符串内的范围内。

然而,我想要设置的文本的一部分作为<强>隐藏(类似于CSS属性display: none的效果)。当一个外部事件发生时(比如说按钮点击),我想取消隐藏或隐藏字符的该特定范围。

反正是有与NSAttributedString做到这一点?

有帮助吗?

解决方案

另一种可能性是使用你要隐藏的文本的自定义属性,然后在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;
}

警告:。这完全是我写这个了我的头顶部,它不能保证编译,工作,点燃火你的硬盘,不踢你的狗,等等

这将产生一个字符串,它是适合绘画,但你仍然需要访问任何隐藏文本的原始字符串。根据您的字符串的大小,这可能是一个大的内存开销。

其他提示

有NSAttributedString支持的属性中列出了AppKit的NSAttributedString.h报头。还有像“隐藏”或“可见”没有钥匙。的属性(样式)不从HTML导出并不能表达所有的CSS特性。

然而,隐藏字符的范围可以设置前景色为透明:

NSMutableAttributedString* myString;

[myString addAttribute:NSForegroundColorAttributeName
                 value:[NSColor clearColor]
                 range:NSMakeRange(0, 10)];

一个简单的选择是隐藏的文本的字体大小设置为0

据我所知有用于NSAttributedString没有空白的类型的属性,但是你可以创建NSAttributedString的子类(或可变的版本,但可能不会是必要的),它覆盖drawInRect:避免绘图的一部分文中有您的属性。

但是,这可能是有些凌乱。

我意识到这是一个非常古老的线程,但其他的另一种选择是做定制的字形呈现。有一个关于在2010 WWDC涵盖代码折叠先进的文字处理技术会议。它使用了类似的技术,您需要与此做什么,这是检查文本作为其正躺在出来,使空字形为您隐藏的文本,而不是实际的字符串。这次会议是会话114 - 从WWDC 2010条的视频高级Cocoa文字提示和技巧。如果你是一个Mac开发者计划的成员,您可以通过开发者门户网站下载这些。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top