为了支持该UIAccessibilityReadingContent
协议,我需要我的 UITextView 来回答我关于它的线路的问题。这些是我需要实现的协议方法:
accessibilityLineNumberForPoint:
<- 提供坐标,返回行号accessibilityContentForLineNumber:
<- 返回给定行的文本accessibilityFrameForLineNumber:
<- 给定一个行号,返回它的帧accessibilityPageContent
<- 整个文本内容。我有。:)
我认为 NSLayoutManager 可以帮助我,但我对它没有那么有经验。我已经弄清楚了一些(我认为),但仍然需要一些帮助。
苹果有一些示例代码(这里)可以让我知道文本视图中的行数:
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
那么剩下的就是,在给定行号的情况下,我如何获取行的内容(作为)?