我正在尝试确定UITextView
中的哪个特定字符已被点击。我尝试使用characterRangeAtPoint:
方法。但它始终返回nil,无论我在UITextView
点击哪里。
我甚至编写并运行了以下代码:
for (int x = 0; x<1000; x++) {
pos.x = x;
for (int y = 0; y<1000; y++) {
pos.y = y;
UITextRange * range = [textView characterRangeAtPoint:pos];
if (range!=nil) {
NSLog(@"x: %f, y: %f", pos.x, pos.y);
}
}
}
好吧,它永远不会到达NSLog
字符串。
我做错了什么?
答案 0 :(得分:8)
这是一个iOS 7错误。 characterRangeAtPoint:
始终返回nil
,除非事先至少选择过一次文本。
作为一种变通方法,您可以事先致电setSelectedRange:
或setSelectedTextRange:
,但textView
会突出显示您的选择。我提出了以下解决方案:
[textView select:textView];
[textView setSelectedTextRange:nil];
调用这两种方法后,characterRangeAtPoint:
将按预期开始工作。
请注意,您只需在textView
初始化后再拨打一次。
编辑:我的答案是从“编辑的,除非事先选择了一些文字”到“,除非当前选择了某些文字”。这是错误的:当前不需要选择文本,只需选择一次。如我所述,随后对setSelectedRange:
的所有来电都将成功。为了进一步澄清而进行了编辑。
答案 1 :(得分:5)
您的UITextView必须是可选的。在故事板中,选中&#34; Selectable&#34;复选框。
在代码中,
textView.selectable = YES;
UITextView上的-closestPositionToPoint:
方法也需要这样做。
答案 2 :(得分:0)
使用shouldChangeCharactersInRange方法而不是characterRangeAtPoint。
并在循环语句中使用If条件。
答案 3 :(得分:0)
您的TextView是否可由用户编辑?
如果是,则尝试texViewDidChangeSelection
方法。每次在textView中移动插入符(光标)时都会调用它。然后通过textView.selectedRange.location
获取光标位置以指向插入符号的索引。
我的假设是你想要角色的位置与角色的数量有关,而不是2D中的坐标。