Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在UITextView中获取单词的X和Y坐标_Iphone_Objective C_Ios_Uitextview_Syntax Highlighting - Fatal编程技术网

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

Iphone 在UITextView中获取单词的X和Y坐标,iphone,objective-c,ios,uitextview,syntax-highlighting,Iphone,Objective C,Ios,Uitextview,Syntax Highlighting,我问了一位开发者(TwoLivesLeft,Codea的创建者),他们是如何在应用程序中突出显示语法的。他回答说: @TD2代码编辑器是使用UITextView实现的。这个 高亮显示是通过将子视图覆盖在适当的位置来完成的 位置-通常是标签。他们从重用池中退出队列, 与UITableViewCells的工作方式类似。在滚动过程中,行 需要重新突出显示从池中拉出标记和 已经离开屏幕,把他们的标记扔回游泳池 有人能解释一下我是如何得到某个单词的x和y的吗?UITextView符合uitexput,可以

我问了一位开发者(TwoLivesLeft,Codea的创建者),他们是如何在应用程序中突出显示语法的。他回答说:

@TD2代码编辑器是使用UITextView实现的。这个 高亮显示是通过将子视图覆盖在适当的位置来完成的 位置-通常是标签。他们从重用池中退出队列, 与UITableViewCells的工作方式类似。在滚动过程中,行 需要重新突出显示从池中拉出标记和 已经离开屏幕,把他们的标记扔回游泳池


有人能解释一下我是如何得到某个单词的x和y的吗?

UITextView符合uitexput,可以找到它的详细描述

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

我实际上并没有试图确保这些工作方式,你想要他们太多,但这似乎是你需要的

如果你需要更多的帮助,请告诉我


更新:

下面是一些如何执行此操作的示例代码。我最终得到了“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];
运行此代码的结果:

@bddicken的作品就像一个魔咒。但问题是,如果文本包含换行符“\n”,它在iOS 7+上不起作用。经过多次搜索,我找到了解决办法

在调用firstRectForRange:by之前,必须确保textView的布局

[textView.layoutManager ensureLayoutForTextContainer:textView.textContainer];
礼节:


附言:首先,我在@bddicken的回答中添加了这个作为评论。因为大多数人都不看评论,所以我添加了这个作为答案。

以下是方法。你有一个起始代码,可以给我一些推了吗?我更新了一些样本代码的答案。从那里开始,修改它,让它按照你想要的方式工作。这对你有用吗?如果是的话,我会很感激你接受它作为答案。@bddicken例如,如果你在“you”之后加上一个换行符,它就不起作用了。不是在iOS 7/8Hey@bddicken上,我也在做同样的事情,但是textview被添加到了单元格上,所以当单元格第一次出现时,它会给出一个rect,但是在重新加载单元格时,它会返回一个无限的rect。请确实建议解决此问题。我的Q链接是