Iphone 在UITextField中禁用放大镜

Iphone 在UITextField中禁用放大镜,iphone,cocoa-touch,uitextfield,Iphone,Cocoa Touch,Uitextfield,是否有方法防止用户在UITextField中移动光标?我希望它停留在字符串的末尾。无法阻止它们移动光标。但是,可以通过实现 –textField:shouldChangeCharactersRange:replacementString: 方法在文本字段的委托中 编辑:您还可以将userInteractionEnabled设置为NO,以便用户无法点击该字段。手动调用becomeFirstResponder,以便该字段获得焦点,因为用户无法点击焦点。我没有检查您是否可以禁用放大镜,但推荐的方法是有

是否有方法防止用户在UITextField中移动光标?我希望它停留在字符串的末尾。

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

–textField:shouldChangeCharactersRange:replacementString:

方法在文本字段的委托中


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

我没有检查您是否可以禁用放大镜,但推荐的方法是有选择地禁用UIResponder(以及UIExtField)中的编辑行为是实现
性能:使用
ui响应程序的sender

如果您对select和selectAll操作返回“NO”,您可能会禁用它


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

我建议检查手势识别器属性

您将在数组中找到许多事件,可能希望将它们全部删除,或者查找触发要拦截的事件的事件并将其删除/替换


我用它从UITextField中删除复制/粘贴和放大镜功能这是一个老问题,但我一直在寻找同一问题的答案,并找到了解决方案

实际上,防止用户移动光标非常简单。只需将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;
}

注意:这只是一个旁路。

这就是我现在所拥有的,但是当用户移动光标,然后键入一个键并将字符附加到字符串末尾时,这对用户来说有点不可靠。不理想……但不是致命的。正在寻找一种在UITextField上禁用触摸的简单方法。如果这是我唯一的选择,我可以选择子类的路线。我可以问一下你想实现什么吗?为什么不允许放置光标?但是,是的,似乎只设置userInteractionEnabled=NO是最好的解决方案。Xcode告诉我,UITextField对于手势识别器“没有出口集合”。我只想补充一点,虽然这确实阻止插入符号移动,但它不会禁用放大镜(至少在iOS 7中没有)。标题和问题都要求不同的东西。在Swift中有效。此代码禁用所有UIResponders标准编辑操作,如复制、粘贴等。select/selectAll仅影响菜单,而不影响放大镜