1

只有当用户输入第三个字符时,下一个代码才会起作用。我希望当用户输入第二个字符时焦点移动 TextField 但仍将前 2 个字符保留在第一个 TextField 中。如果我尝试类似newString.length < 2,当连续输入 2 个字符时,我将在第一个字符中获得第一个字符,在UITextField第二个字符中获得第二个字符UITextField

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

    if (newString.length <= 2 )
    {

        return YES;
    }
    else
    {
        NSInteger nextTag;
        nextTag = textField.tag + 1;

        UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];
        if (nextResponder) {
            [nextResponder becomeFirstResponder];
        }
        else {
            [textField resignFirstResponder];            
        }
    }
    return YES;
}
4

1 回答 1

1

我相信这应该有效:

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

    if(newString.length == 2)
    {
        UIResponder* nextResponder = [textField.superview viewWithTag:textField.tag + 1];

        if (nextResponder) {
            [nextResponder performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.1];
        }
        else {
            [textField resignFirstResponder];
        }
    }

    return newString.length <= 2;
}

请尝试并告诉我它是否有效。如果不是,请告诉我更多有关您的设置的信息,我将尝试设置像您一样的视图,这样我可以更轻松地尝试解决方案。

好的,编辑上面的作品。它不是很漂亮,但它可以完成工作。遗憾的是,苹果不会为 didChangeCharactersInRange 添加一个更适合于此的方法。

EDIT根据 Sha 的调查结果编辑 0.1 而不是 0 在计时器间隔

编辑根据迈克的建议更改

于 2013-08-29T15:10:02.467 回答