我问过一个开发人员(Codea的创建者TwoLivesLeft)他们如何在他们的应用程序中进行语法高亮显示。他回答说:
@ TD2 Codea编辑器是使用UITextView实现的。该 通过在适当的位置叠加子视图来完成突出显示 职位 - 通常是UILabels。他们从重用池出发, 类似于UITableViewCells的工作方式。在滚动期间,线条 要求重新突出池中的拉标记和线条 已离开屏幕,将他们的标记转回池中。
任何人都可以解释我如何获得某个单词的x和y吗?
答案 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];
运行此代码的结果:
答案 1 :(得分:5)
@ bddicken' s android youtube upload video with static username and password就像一个魅力。但问题是,如果文本包含换行符" \ n"它在iOS 7+上不起作用。经过大量的搜索,我找到了解决方案。
在调用firstRectForRange:by
之前,您必须确保textView的布局[textView.layoutManager ensureLayoutForTextContainer:textView.textContainer];
P.S:起初我把这个作为对@bddicken答案的评论。由于大多数人都没有阅读评论,我将其添加为答案。