我需要在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),必须将UITextPositionUITextInput子类化。我没有这样做,但是无论如何我还是尝试了,按照文档的示例代码并将子类传递给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/

10-09 16:24