在UITextField中禁用放大镜

时间:2009-05-14 22:30:40

标签: iphone cocoa-touch uitextfield

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

5 个答案:

答案 0 :(得分:6)

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

防止用户移动光标实际上非常简单。只需将UITextField子类化,并提供caretRectForPosition:

的以下实现
- (CGRect)caretRectForPosition:(UITextPosition *)position
{
    return [super caretRectForPosition:self.endOfDocument];
}

答案 1 :(得分:4)

无需SUBCLASS

您可以使用UITextFieldDelegate。它将使禁用放大镜和放大镜文字选择。

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

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

注意:这只是一个旁路。

答案 2 :(得分:1)

无法阻止它们移动光标。但是,您可以通过实施

来阻止他们编辑文本

– textField:shouldChangeCharactersInRange:replacementString:

文本字段委托中的方法。

修改:您还可以将userInteractionEnabled设置为NO,以便用户无法点按该字段。手动调用becomeFirstResponder以使该字段获得焦点,因为用户无法点击进行聚焦。

答案 3 :(得分:1)

我建议检查 gestureRecognizers 属性。

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

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

答案 4 :(得分:0)

我没有检查你是否可以禁用放大镜,但是在UIResponder(以及UITextField)中有选择地禁用编辑行为的推荐方法是实现canPerformAction:withSender的{​​{1}}。< / p>

请参阅UIResponder documentation

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

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