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

时间:2018-01-11 05:43:01

标签: ios objective-c uitextfield

我有一个程序,其中我有四个文本字段,每个文本字段只有一个字符的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;
}

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

3 个答案:

答案 0 :(得分:4)

首先,确保为所有四个文本字段设置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;
}

答案 1 :(得分:0)

尝试此操作它将帮助您进入下一个文本字段并将BAck删除 我希望这会很有帮助

 -(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];
    }

}


}

答案 2 :(得分:0)

重要事情需要记住

1)最初,您必须设置UITextField的委托 2)确保所有文本字段的插座连接正确。

我们举一个例子:

1)假设您已经采用了4个文本字段,例如firstPin,secondPin,thirdPin,4thPin 2)现在在委托函数“shouldChangeCharactersInRange”你必须使txtOne becomFirstResponder和其他所有你必须做的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;

}

此代码支持添加文本以及删除文本