检测轻拍的字符。 UITextView characterRangeAtPoint总是返回nil
我试图确定, UITextView
哪个特定字符已被点击。 我试图使用characterRangeAtPoint:
方法。 但它总是返回零,无论在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
string。 我究竟做错了什么?
这是一个iOS 7的错误。 characterRangeAtPoint:
总是返回nil
,除非事先至lessselect了一些文本。
作为一种解决方法,您可以事先调用setSelectedRange:
或setSelectedTextRange:
但是然后textView
会突出显示您的select。 我想出了以下解决scheme:
[textView select:textView]; [textView setSelectedTextRange:nil];
调用这两个方法后, characterRangeAtPoint:
将按预期开始工作。
请注意,您只需在textView
初始化后调用一次即可。
编辑:我的答案被编辑从“除非一些文字已被选中” , “除非一些文字被选中” 。 这是错误的:文本不需要当前select,只需要select一次。 所有随后调用setSelectedRange:
然后将成功,正如我的笔记所述。 进一步清晰编辑。
你的UITextView必须是可选的。 在故事板中,选中“可选”checkbox。
在代码中,
textView.selectable = YES;
这也是UITextView上的-closestPositionToPoint:
方法所必需的。
使用shouldChangeCharactersInRange方法而不是characterRangeAtPoint。
并使用你的If条件放置循环语句。
你的TextView是用户可编辑的吗? 如果是,则尝试texViewDidChangeSelection
方法。 每当光标(光标)在textView中移动时都会调用它。 然后通过textView.selectedRange.location
获取光标位置指向插入索引。
我的假设是,你需要angular色相对于angular色数量的位置,而不是二维坐标。