输入2个字符后,从UITextfield移动焦点

时间:2013-08-29 15:02:48

标签: ios objective-c cocoa-touch

下一个代码仅在用户输入第三个字符时才有效。我希望焦点在用户输入第二个字符时移动TextField,但仍保留第一个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;
}

1 个答案:

答案 0 :(得分: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添加一个更合适的方法。

编辑根据Sha的调查结果编辑0.1而不是定时器间隔中的0

编辑根据迈克的建议改变