1

我想防止光标向后移动UITextField。或者我需要防止在已输入的两个字符之间输入文本。我怎样才能做到这一点?

4

3 回答 3

1

没有任何属性或方法可以阻止用户在特定文本字段上使用放大镜。您可以尝试阻止字符串中的所有字符:

- (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 是一个庞大的数据库,在提出问题之前进行一些研究可能会对您将来有所帮助。

于 2012-12-28T13:19:05.653 回答
0

要停止在 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

于 2012-12-28T13:14:41.657 回答
0

您不能禁止插入符号移动,但您可以使用UITextFieldDelegate' 方法textField:shouldChangeCharactersInRange:replacementString:测试是否在已键入的字符串中键入了文本,如果不是,则手动更改文本字段中的文本并借助协议selectedTextRange属性将插入符号移动到末尾。UITextInput

于 2012-12-28T13:23:24.853 回答