0

如何从 CTlineRef 中提取文本字符串?

例如,我知道我可以执行 CTLineGetStringRange(aLine) 并且我有用于生成线的 AttributedString(即:CFAttributedStringRef)。如何从 AttributedString 中提取文本字符串?

4

1 回答 1

4

所以你有这个:

CFAttributedStringRef cfAttributedString = ...;
CTLineRef line = ...;
CFRange cfRange = CTLineGetStringRange(line);

将 转换CFRange为 anNSRange并将 the转换CFAttributedStringRef为 an NSAttributedString *

NSRange nsRange = NSMakeRange(cfRange.location, cfRange.length);
NSAttributedString *richText = (__bridge NSAttributedString *)cfAttributedString;

然后您可以使用 Objective-C 消息来获取子字符串。如果你想要一个属性子字符串:

NSAttributedString *richSubtext = [richText attributedSubstringFromRange:nsRange];

如果你想要一个普通的子字符串:

NSString *substring = [richText.string substringWithRange:nsRange];

如果你出于某种原因想坚持使用 Core Foundation 函数(我不推荐它),你可以获得属性子字符串:

CFAttributedStringRef cfAttributedSubstring = CFAttributedStringCreateWithSubstring(
    NULL, cfAttributedString, cfRange);

或者像这样的普通子字符串:

CFStringRef cfString = CFAttributedStringGetString(cfAttributedString);
CFStringRef cfSubstring = CFStringCreateWithSubstring(NULL, cfString, cfRange);
于 2016-12-27T10:26:12.720 回答