我需要在textview中找到不同范围的像素帧。我正在使用- (CGRect)firstRectForRange:(UITextRange *)range;
来做到这一点。但是我找不到实际创建UITextRange
的方法。
基本上这就是我要寻找的:
- (CGRect)frameOfTextRange:(NSRange)range inTextView:(UITextView *)textView {
UITextRange*range2 = [UITextRange rangeWithNSRange:range]; //DOES NOT EXIST
CGRect rect = [textView firstRectForRange:range2];
return rect;
}
苹果公司说,为了采用
UITextRange
协议(protocol),必须将UITextPosition
和UITextInput
子类化。我没有这样做,但是无论如何我还是尝试了,按照文档的示例代码并将子类传递给firstRectForRange
,这导致崩溃。如果有更简单的方法将不同颜色的
UILables
添加到textview,请告诉我。我尝试将UIWebView的content editable
设置为TRUE,但我不喜欢与JS进行通信,唯一需要的就是着色。提前致谢。
最佳答案
您可以使用textRangeFromPosition:toPosition
方法创建文本范围。此方法需要两个位置,因此您需要计算范围起点和终点的位置。这可以通过positionFromPosition:offset
方法完成,该方法从另一个位置返回一个位置和一个字符偏移量。
- (CGRect)frameOfTextRange:(NSRange)range inTextView:(UITextView *)textView
{
UITextPosition *beginning = textView.beginningOfDocument;
UITextPosition *start = [textView positionFromPosition:beginning offset:range.location];
UITextPosition *end = [textView positionFromPosition:start offset:range.length];
UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end];
CGRect rect = [textView firstRectForRange:textRange];
return [textView convertRect:rect fromView:textView.textInputView];
}
关于objective-c - 从NSRange创建UITextRange,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9126709/