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