我想防止光标向后移动UITextField
。或者我需要防止在已输入的两个字符之间输入文本。我怎样才能做到这一点?
3 回答
没有任何属性或方法可以阻止用户在特定文本字段上使用放大镜。您可以尝试阻止字符串中的所有字符:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if(range.location < textField.text.length) return NO; else return YES;
}
经过一番研究,我发现了这个问题:在 UITextField 中禁用放大镜。接受答案的作者说有办法做到这一点:
您还可以将 userInteractionEnabled 设置为 NO,以便用户无法点击该字段。手动调用 becomeFirstResponder 以便该字段获得焦点,因为用户无法点击焦点。
但是,正如我发现的那样,它不起作用,因为它setUserInteractionEnabled:NO
阻止了文本字段成为第一响应者。在第二次研究之后,我发现了另一个问题:即使在 userInteractionEnabled = NO 时,在 firstResponder 上显示 UITextField 键盘。MaxGabriel用户声称他找到了方法:
我所做的是将隐藏的文本字段添加到视图中,并在其上调用 becomeFirstResponder。用户不知道此文本字段存在。在来自文本字段的委托回调中,我获取用户输入的文本并将其添加到 UITextView(尽管您可以将文本添加到您想要的任何内容,例如您的问题中的 UITextField)。我为可见文本视图关闭了 userInteractionEnabled。这会产生您想要的效果。
Stack Overflow 是一个庞大的数据库,在提出问题之前进行一些研究可能会对您将来有所帮助。
要停止在 UiTextField 中输入文本,您应该使用 uitextfield 委托方法
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
//Set tag for a textfield
if(textField.tag==10)
{
NSUInteger newLength = [textField.text length] + [string length] - range.length;
return (newLength < [textField.text length]) ? NO : YES;
}
}
根据您的要求修改逻辑。为了防止在两个字符之间输入文本使用 NSRange 和 textfield text of range is less than textfield text length then return No then text will not be enter in UITextField
您不能禁止插入符号移动,但您可以使用UITextFieldDelegate
' 方法textField:shouldChangeCharactersInRange:replacementString:
测试是否在已键入的字符串中键入了文本,如果不是,则手动更改文本字段中的文本并借助协议selectedTextRange
属性将插入符号移动到末尾。UITextInput