在UITextField中禁用放大镜

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在UITextField中禁用放大镜相关的知识,希望对你有一定的参考价值。

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

答案

没有办法阻止它们移动光标。但是,您可以阻止他们编辑文本,除非最后通过实现

– textField:shouldChangeCharactersInRange:replacementString:

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

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

另一答案

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

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

- (CGRect)caretRectForPosition:(UITextPosition *)position
{
    return [super caretRectForPosition:self.endOfDocument];
}
另一答案

不需要SUBCLASS。

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

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

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

注意:这只是一个旁路。

另一答案

我建议检查gestureRecognizers属性。

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

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

另一答案

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

UIResponder documentation

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

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

以上是关于在UITextField中禁用放大镜的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 中的 UItextfield 并用放大镜移动光标

放大 UITextField

Android TV(leanback)中的持久标头片段(禁用动画)

在 uitextfield 中禁用查找和共享文本选择

在 iOS5 的 uitextfield 中禁用粘贴

在 UITextField 中禁用“定义”