7

有没有办法阻止用户在 UITextField 中移动光标?我希望它留在字符串的末尾。

4

5 回答 5

7

这是一个老问题,但我一直在寻找同一个问题的答案,并找到了解决方案。

阻止用户移动光标实际上非常简单。只需继承 UITextField 并提供以下实现caretRectForPosition:

- (CGRect)caretRectForPosition:(UITextPosition *)position
{
    return [super caretRectForPosition:self.endOfDocument];
}
于 2013-05-16T11:32:32.307 回答
5

不需要子类

你可以使用UITextFieldDelegate. 它将禁用放大镜和文本选择。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    textField.userInteractionEnabled = NO;
    return YES;
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    textField.userInteractionEnabled = YES;
}

注意:这只是一个旁路。

于 2018-01-03T12:39:21.400 回答
1

没有办法阻止他们移动光标。但是,您可以通过实施

– textField:shouldChangeCharactersInRange:replacementString:

文本字段的委托中的方法。

编辑:您还可以设置userInteractionEnabledNO使用户无法点击该字段。手动调用becomeFirstResponder以使该字段获得焦点,因为用户无法点击聚焦。

于 2009-05-14T23:00:33.637 回答
1

我建议检查gestureRecognizers属性。

您会在数组中找到很多它们,并且可能希望将它们全部删除,或者找到触发要拦截并删除/替换它的事件的那些。

我用它从 UITextField 中删除复制/粘贴和放大镜功能

于 2011-10-21T01:45:00.413 回答
0

我没有检查您是否可以禁用放大镜,但推荐的在 UIResponder(以及 UITextField)中选择性地禁用编辑行为的方法是实现canPerformAction:withSender.UIResponder

请参阅UIResponder 文档

也许如果您对 select 和 selectAll 操作返回“NO”,您可以禁用它。

另一种更残酷的方法是拦截任何触摸事件并将光标重置到末尾。

于 2010-08-18T11:42:49.873 回答