Получить информацию о линии из UITextView и NSLayoutManager
Для того, чтобы поддержатьUIAccessibilityReadingContent
протокол, мне нужен мой UITextView, чтобы ответить на вопросы о его линиях. Вот методы протокола, которые мне нужно реализовать:
accessibilityLineNumberForPoint:
<- при условии координаты, вернуть номер строкиaccessibilityContentForLineNumber:
<- вернуть текст данной строкиaccessibilityFrameForLineNumber:
<- учитывая номер строки, вернуть ее кадрaccessibilityPageContent
<- Весь текстовый контент. Что у меня есть. :)Я полагаю, что NSLayoutManager может помочь мне, но я не настолько опытен с этим. Я понял кое-что из этого (я думаю), но мне все еще нужна помощь.
У Apple есть пример кода (Вот), который может получить мне количество строк в текстовом представлении:
NSLayoutManager *layoutManager = [textView layoutManager];
unsigned numberOfLines, index, numberOfGlyphs =
[layoutManager numberOfGlyphs];
NSRange lineRange;
for (numberOfLines = 0, index = 0; index < numberOfGlyphs; numberOfLines++){
(void) [layoutManager lineFragmentRectForGlyphAtIndex:index
effectiveRange:&lineRange];
index = NSMaxRange(lineRange);
}
Я полагаю, что сlineRange
выше, я могу рассчитать количество строк, используя этот метод наNSLayoutManager
:
- (NSRect)boundingRectForGlyphRange:(NSRange)glyphRange inTextContainer:(NSTextContainer *)container
И учитываяlineRanges
Я должен быть в состоянии рассчитать номер строки для точки, используя (найдяlineRange
который содержит индекс глифа:
- (NSUInteger)glyphIndexForPoint:(CGPoint)point inTextContainer:(NSTextContainer *)container fractionOfDistanceThroughGlyph:(CGFloat *)partialFraction
Так что остается, как я могу получить содержимое строки (какNSString
), учитывая номер строки?