2016-12-25 94 views
0

如何從CTlineRef中提取文本字符串?我知道,例如,我可以做CTLineGetStringRange(aLine),我有用於生成線的AttributedString(即:CFAttributedStringRef)。如何從AttributedString中提取文本字符串?如何從CTlineRef中提取文本字符串?

+0

我猜你是CTLineGetGlyphRuns,然後是CTRunGetGlyphs ......每次運行。 –

+0

感謝約翰,但CTRunGetGlyphs將返回我CGGlyph ...我想檢索一個CFStringRef :( – loki

回答

3

所以,你有這樣的:

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

轉換的CFRangeNSRange和鑄CFAttributedStringRefNSAttributedString *

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]; 

如果你想堅持核心基礎功能出於某種原因(我不會推薦它),你可以得到歸因子:

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

或者純子是這樣的:

CFStringRef cfString = CFAttributedStringGetString(cfAttributedString); 
CFStringRef cfSubstring = CFStringCreateWithSubstring(NULL, cfString, cfRange);