如何在比 iOS 6.0 更早的 iOS 版本中从 UITextRange 获取矩形

Posted

技术标签:

【中文标题】如何在比 iOS 6.0 更早的 iOS 版本中从 UITextRange 获取矩形【英文标题】:How to get the rects from UITextRange in earlier iOS version than iOS 6.0 【发布时间】:2012-12-26 08:39:09 【问题描述】:

我想从 UITextRange 获取所有矩形。要知道,如果 UITextView 换行,UITextRange 将由超过 1 个 CGRect 表示。在 ios 6.0 中,有一个方法叫“selectionRectsForRange:”,所以你可以得到所有的 CGRects。但在旧版本中,只有一个方法“firstRectForRange:” 我一遍又一遍地检查 API 文档,但我什么也没找到。

我的代码喜欢吹:

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];

//(in iOS 6.0)      
NSArray *array = [textView selectionRectsForRange:textRange];
for (int i=0; i<[array count]; i++) 
    NSLog(@"rect array = %@", NSStringFromCGRect([[array objectAtIndex:i] rect]));

// (in earlier version)
CGRect rect = [textView firstRectForRange:textRange];

【问题讨论】:

【参考方案1】:

根据此答案中的信息: How to find position or get rect of any word in textview and place buttons over that?

您必须反复拨打firstRectForRange

当您得到 first 矩形后,您将能够检查其范围。使用这个和您最初提供的范围,您可以再次调用 firstRectForRange 并调整范围(如果需要)...

【讨论】:

【参考方案2】:

如何使用 frameOfTextRange 然后做这样的事情。但我不确定这是否适用于您的特定 iOS 版本。

- (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];

【讨论】:

以上是关于如何在比 iOS 6.0 更早的 iOS 版本中从 UITextRange 获取矩形的主要内容,如果未能解决你的问题,请参考以下文章

在比 Base SDK 更新版本的 iOS 设备上调试

如何在 iOS 15 及更早版本上支持程序化视图关闭

优胜美地 Xcode 6.3.2 和更早的 osx 版本

08001 - SQL Server Native Client 11.0 不支持连接到SQL Server 2000或更早的版本。

用 Swift 编写的代码可以在 iOS 7 及更早版本上运行吗? [复制]

iOS 7 上的 UITextView contentOffset