Ios 我可以用代码按回车键吗?

Ios 我可以用代码按回车键吗?,ios,objective-c,uitextfield,Ios,Objective C,Uitextfield,我有一个uitextfield,我计算字符数。这个想法是,当计数达到4时,它应该进入下一个文本字段。问题是,虽然计数器告诉我字段确实包含四个字符,但字段仅显示三个字符。当我手动按下返回键时,它会工作,但我不希望用户必须这样做。这是我的密码 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

我有一个uitextfield,我计算字符数。这个想法是,当计数达到4时,它应该进入下一个文本字段。问题是,虽然计数器告诉我字段确实包含四个字符,但字段仅显示三个字符。当我手动按下返回键时,它会工作,但我不希望用户必须这样做。这是我的密码

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSInteger textLength = 0;
    textLength = [textField.text length] + [string length] - range.length;
    NSLog(@"Length: %ld", (long)textLength);
    NSLog(@"tag: %ld", (long)textField.tag);
    if (textField.tag == 1 || textField.tag == 2) {
        if (textLength == 4) {
            NSLog(@"doneeee");
            NSLog(@"testfield: %@", textField.text);
           }
    }

  if (textField.tag == 3) {
            NSLog(@"we're here");
            if (textLength == 6) {
                NSLog(@"Zip is done");
                [self checkTheTextField:textField];
        }
    }


    return YES;
}

当文本长度为4时,请尝试退出FirstResponder并成为FirstResponder,如评论中所述,之所以在
NSLog
语句中只显示3个字符,是因为在方法返回
YES
之前,更改尚未应用于
textField.text
。为了让应用程序在达到所需长度时自动选择下一个文本字段,只需在下一个文本字段上调用
becomeFirstResponder
。例如:

if(textLength == 4)
{
    NSLog(@"doneeee");

    // Here's how you can output the field's text, assuming you will return YES
    NSLog(@"testfield: %@", [textField.text stringByReplacingCharactersInRange:range withString:string];

    // Here's how you make the next field active
    [nextTextFieldOutlet becomeFirstResponder];  // Or whatever you field is called.
}

return YES;


作为旁注,如果字段的长度大于特定字段的所需长度,您可能需要输入一些逻辑,以从此方法返回
NO
。例如,如果您只希望邮政编码字段的最大值为6,请检查
fieldLength>6
,并在这种情况下返回
NO
。这样,如果有人试图粘贴一个长字符串,它将拒绝它。

作为另一个选项,当长度达到4时,您可以直接设置textField.text,将下一个textField设置为first responder,并返回NO

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *text = [textField.text stringByReplacingCharactersInRange:range withString:string];

    if (textField.tag == 1 || textField.tag == 2) {
        if (text.length == 4) {
            textField.text = text;
            [yourNewTextField becomeFirstResponder];
            return NO;
        }
    }

    // ...

    return YES;
}

屏幕上的字段仅显示三个字符,还是NSLog?在方法返回YES之前调用NSLog,这意味着它们尚未应用最新的更改(textField.text指的是已更改的内容,而不是应更改的内容)。当达到4时,您应该能够调用[yourTextField resignFirstResponder];然后[你的新文本域成为第一响应者];按照@jorn所说的,在这个方法返回YES之后,您需要调用[yourNewTextField becomeFirstResponder],以便看到第四个字符出现。