在UITextView中获取单词的X和Y坐标

时间:2012-07-14 17:58:34

标签: iphone objective-c ios uitextview syntax-highlighting

我问过一个开发人员(Codea的创建者TwoLivesLeft)他们如何在他们的应用程序中进行语法高亮显示。他回答说:

  

@ TD2 Codea编辑器是使用UITextView实现的。该   通过在适当的位置叠加子视图来完成突出显示   职位 - 通常是UILabels。他们从重用池出发,   类似于UITableViewCells的工作方式。在滚动期间,线条   要求重新突出池中的拉标记和线条   已离开屏幕,将他们的标记转回池中。

任何人都可以解释我如何获得某个单词的x和y吗?

2 个答案:

答案 0 :(得分:37)

UITextView符合UITextInput,其中可以找到详细说明here

查看所需的方法“textRangeFromPosition:toPosition:”,“positionFromPosition:offset:”,“positionFromPosition:inDirection:offset:”,以及UITextInput协议中的一些其他基于几何的方法。这些可能会提供您正在寻找的功能。

我实际上并没有尝试确保这些工作方式也符合您的需要,但这看起来就像您需要的那样。

如果您需要更多帮助,请与我们联系!


更新:

以下是如何执行此操作的示例代码。我最终得到了“firstRectForRange:”方法。此代码基本上采用UITextView“textStuff”的最后三个字母,并将其突出显示为绿色。

UITextView *textStuff = [[UITextView alloc] init];
textStuff.frame = CGRectMake(2.0, 200.0, 200.0, 40.0);
textStuff.text = @"how are you today?";
textStuff.textColor = [UIColor blackColor];

UITextPosition *Pos2 = [textStuff positionFromPosition: textStuff.endOfDocument offset: nil];
UITextPosition *Pos1 = [textStuff positionFromPosition: textStuff.endOfDocument offset: -3];

UITextRange *range = [textStuff textRangeFromPosition:Pos1 toPosition:Pos2];

CGRect result1 = [textStuff firstRectForRange:(UITextRange *)range ];

NSLog(@"%f, %f", result1.origin.x, result1.origin.y);

UIView *view1 = [[UIView alloc] initWithFrame:result1];
view1.backgroundColor = [UIColor colorWithRed:0.2f green:0.5f blue:0.2f alpha:0.4f];
[textStuff addSubview:view1];

运行此代码的结果:

enter image description here

答案 1 :(得分:5)

@ bddicken' s android youtube upload video with static username and password就像一个魅力。但问题是,如果文本包含换行符" \ n"它在iOS 7+上不起作用。经过大量的搜索,我找到了解决方案。

在调用firstRectForRange:by

之前,您必须确保textView的布局
[textView.layoutManager ensureLayoutForTextContainer:textView.textContainer];

礼貌:https://stackoverflow.com/a/11487125/3549781

P.S:起初我把这个作为对@bddicken答案的评论。由于大多数人都没有阅读评论,我将其添加为答案。