有没有办法阻止用户在 UITextField 中移动光标?我希望它留在字符串的末尾。
5 回答
这是一个老问题,但我一直在寻找同一个问题的答案,并找到了解决方案。
阻止用户移动光标实际上非常简单。只需继承 UITextField 并提供以下实现caretRectForPosition:
- (CGRect)caretRectForPosition:(UITextPosition *)position
{
return [super caretRectForPosition:self.endOfDocument];
}
不需要子类。
你可以使用UITextFieldDelegate
. 它将禁用放大镜和文本选择。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
textField.userInteractionEnabled = NO;
return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
textField.userInteractionEnabled = YES;
}
注意:这只是一个旁路。
没有办法阻止他们移动光标。但是,您可以通过实施
– textField:shouldChangeCharactersInRange:replacementString:
文本字段的委托中的方法。
编辑:您还可以设置userInteractionEnabled
为NO
使用户无法点击该字段。手动调用becomeFirstResponder
以使该字段获得焦点,因为用户无法点击聚焦。
我建议检查gestureRecognizers属性。
您会在数组中找到很多它们,并且可能希望将它们全部删除,或者找到触发要拦截并删除/替换它的事件的那些。
我用它从 UITextField 中删除复制/粘贴和放大镜功能
我没有检查您是否可以禁用放大镜,但推荐的在 UIResponder(以及 UITextField)中选择性地禁用编辑行为的方法是实现canPerformAction:withSender
.UIResponder
请参阅UIResponder 文档。
也许如果您对 select 和 selectAll 操作返回“NO”,您可以禁用它。
另一种更残酷的方法是拦截任何触摸事件并将光标重置到末尾。