Чтобы поддерживать протокол 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
), учитывая номер строки?