2016-12-25 11 views
0

Как извлечь текстовую строку из CTlineRef?Как извлечь текстовую строку из CTlineRef?

Я знаю, например, что могу делать CTLineGetStringRange (aLine), и у меня есть AttributedString (то есть: CFAttributedStringRef), который использовался для создания строки. как извлечь текстовую строку из AttributedString?

+0

Я предполагаю, что вы CTLineGetGlyphRuns ... затем CTRunGetGlyphs ... от каждого прогона. –

+0

поблагодарить john, но CTRunGetGlyphs вернет мне CGGlyph ... я хочу получить CFStringRef :( – loki

ответ

3

Так у вас есть это:

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

Преобразование CFRange к NSRange и кастовал CFAttributedStringRef Ань 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]; 

Если вы хотите придерживаться ключевых функций Фонда по какой-то причине (я бы не рекомендовал его), вы может получить приписываемую подстроку:

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

или простую подстроку так:

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