文本字段一个字符并自动更改为下一个文本字段?不起作用?

Text field one character and automatic change to next text field?Not working?

我有一个程序,其中有四个文本字段,每个文本字段只接受一个字符的 OTP。当用户在一个文本字段中输入一个字符时,它应该自动移动到下一个文本字段。但出于某种原因,只有我的第一个文本字段能够执行此操作,它会转到第三个文本字段而不是第二个。并且文本字段的其余部分无法执行从一个文本字段移动到另一个文本字段的自动操作。我使用文本字段委托来进行编码。下面给出的是我的代码。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (![string isEqualToString:@""]) {
    textField.text = string;
    if ([textField isEqual:self.firstOTP]) {
        [self.secondOTP becomeFirstResponder];
    }else if ([textField isEqual:self.secondOTP]){
        [self.thirdOTP becomeFirstResponder];
    }else if ([textField isEqual:self.thirdOTP]){
        [self.fourthOTP becomeFirstResponder];
    }else{
        [textField resignFirstResponder];
    }
    return NO;
}
return YES;
}

下面给出了我的代码,用于识别是否输入了一个字符。

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
if (textField.text.length > 0) {
    textField.text = @"";
}
return YES;
}

任何人都可以识别错误吗?

首先,确保为所有四个文本字段设置 delegate。还要确保您的插座连接正确。

接下来,将 isEqual: 的用法更改为 ==。你实际上确实想在这里使用 == 因为你想比较指针,而不是看两个对象在逻辑上是否相等。

如果用户将文本粘贴到文本字段中,您也会遇到问题。用户可以轻松输入多个字符。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if (string.length > 0) {
        textField.text = [string substringToIndex:1];
        if (textField == self.firstOTP) {
            [self.secondOTP becomeFirstResponder];
        } else if (textField == self.secondOTP) {
            [self.thirdOTP becomeFirstResponder];
        } else if (textField == self.thirdOTP) {
            [self.fourthOTP becomeFirstResponder];
        } else {
            [textField resignFirstResponder];
        }

        return NO;
    }

    return YES;
}

试试这个,它会帮助您转到下一个文本字段并在删除时返回 我希望这会有所帮助

 -(void)textFieldDidChange :(UITextField *) textField{
if (textField == FirstChar) {
    if (textField.text.length==0) {
        [textField becomeFirstResponder];
        [FirstChar becomeFirstResponder];
    }
    else{
        [textField resignFirstResponder];
        [SecondChar becomeFirstResponder];
    }
}
else if (textField == SecondChar) {
    if (textField.text.length==0) {
        [textField resignFirstResponder];

        [SecondChar becomeFirstResponder];
    }
    else{
        [textField resignFirstResponder];
        [ThirdChar becomeFirstResponder];
    }
}
else if (textField == ThirdChar) {
    if (textField.text.length==0) {
        [textField resignFirstResponder];

        [ThirdChar becomeFirstResponder];
    }
    else{
        [textField resignFirstResponder];
        [FourthChar becomeFirstResponder];
    }

}


}

重要的事情需要记住

1) 最初,您必须设置 UITextField 的委托 2) 确保所有textfield的outlet连接正确

举个例子:

1) 假设您使用了 4 个文本字段,例如 firstPin、secondPin、thirdPin、fourthPin 2) 现在在委托函数中 "shouldChangeCharactersInRange" 你必须让 txtOne 成为 comFirstResponder 和其他所有你必须让 resignFirstResponder

这是代码

- (BOOL)textField:(UITextField )textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString )string
{    
if (range.length==1)
{
    [textField setText:@""];

    if (textField == firstPin)
    {
        NSLog(@"dumbo");
    }
    else if (textField == secondPin)
    {
        [secondPin resignFirstResponder];
        [firstPin becomeFirstResponder];
    }
    else if (textField == thirdPin)
    {
        [thirdPin resignFirstResponder];
        [secondPin becomeFirstResponder];
    }
    else if (textField == fourthPin)
    {
        [fourthPin resignFirstResponder];
        [thirdPin becomeFirstResponder];
    }
}
else
{
    [textField setText:string];

    if (textField == firstPin)
    {
        [firstPin resignFirstResponder];
        [secondPin setUserInteractionEnabled:YES];
        [secondPin becomeFirstResponder];
    }
    else if (textField == secondPin)
    {
        [secondPin resignFirstResponder];
        [thirdPin setUserInteractionEnabled:YES];
        [thirdPin becomeFirstResponder];
    }
    else if (textField == thirdPin)
    {
        [thirdPin resignFirstResponder];
        [fourthPin setUserInteractionEnabled:YES];
        [fourthPin becomeFirstResponder];
    }
    else if (textField == fourthPin)
    {
        [fourthPin resignFirstResponder];
    }


}

return NO;

}

此代码支持添加文本和删除文本