如何在UITextView中获得给定文本范围的渲染行

时间:2014-03-17 20:32:03

标签: ios uitextview

我试图复制iBooks在用户添加注释时显示的图标效果。此注释位于与突出显示的文本相同的行的文本的最右侧。我希望在每行文本旁边显示一条带有注释的文本。我正在使用UITextView并且我已将文本归结为显示已突出显示的内容,但我无法确定哪个呈现的文本行具有这些属性。

大多数UITextView方法似乎都处理文本范围而不是渲染行。有没有办法在给定范围的UITextView中获取渲染行?

1 个答案:

答案 0 :(得分:0)

我想出了如何做到这一点。对于要在旁边显示图标的每个项目,您可以在该范围的开头对您的属性文本进行子字符串。然后,您将获得该文本的边界矩形并使用它来计算图标的放置位置:

NSAttributedString *substring = [self.attributedText attributedSubstringFromRange:NSMakeRange(0, location.unsignedIntegerValue)];

// Find the frame that would enclose the substring of text at the start of the range.
CGRect frame = [substring boundingRectWithSize:maxSize
                                       options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                       context:nil];

UIImage *image = [UIImage imageNamed:@"icon.png"];
UIImageView *imageView  = [[UIImageView alloc] initWithFrame:CGRectMake(self.frame.origin.x + self.frame.size.width + 10, self.frame.origin.y + frame.size.height - 20, image.size.width, image.size.height)];

[self.view addSubview:imageView];

请注意,这会将图标放在文本的右侧。