我有一个 UITextView
,可让您编写多行文本。
如何让用户在不长按的情况下选择单词之间的字母?
目前,当使用触摸屏选择单词之间的字符时,光标会移动到单词的开头或结尾:
示例:点击“c”将光标移动到词尾
示例:点击“a”将光标移动到单词的开头
允许在任何地方选择文本(无需长按 + 放大镜)的功能在许多 iOS 代码编辑器应用程序中都有,例如 Coda和 Pythonista .
最佳答案
这不是一个难以实现的挑战。
我将在序言中说明这种方法的问题是一致性。请记住,您的用户正在使用他们的手指,而不是 stilii。手指的表面积很大,击中精确的像素区域非常困难,尤其是对于小文本。我建议不要在模拟器中玩游戏,因为模拟器中有精确的定位设备,而应在设备上玩。
第一个挑战是禁用默认的点击行为或 UITextView
。这不是一项艰巨的任务 - 您可以在 touchesBegan:withEvent:
级别“解决”问题,您必须了解这些触摸是什么(单击、平移和长按) ),或者在手势识别器级别,您可以在其中禁用 TextView 的私有(private)手势识别器,该识别器专门处理点击时的光标移动(与其他触摸类型相比)。我已经为各种项目完成了后者,这是可能的。您也可以在不禁用默认行为的情况下尝试该方法,但光标可能会闪烁。测试并决定。
现在实现你所需要的。以某种方式获取触摸点(使用 UIResponder
API 或手势识别器)。请记住, TextView 是一个 ScrollView ,其中包含一个大型 subview ,内容被绘制到其中。您必须使用 convertPoint:
API 将此触摸点从 TextView 坐标系转换为内部 View 的坐标系。一旦你有了它,你就可以使用 TextView 的布局管理器来获取触摸点的字符索引:
NSUInteger chIdx = [self characterIndexForPoint:touchPoint inTextContainer:self.textContainer fractionOfDistanceBetweenInsertionPoints:NULL];
您可以使用此索引通过 selectedRange
属性设置 TextView 的光标。
关于ios - 允许在 UITextView 中的任何位置选择光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41309999/