达到最大长度后移动光标

时间:2014-01-11 14:22:09

标签: objective-c uitextfield

我已根据SO的其他一些答案粗略地整理了这些代码,但我仍然无法使其工作。我希望我的光标在达到一定长度后移动到下一个textField,并且它在某种程度上做到了......

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range     replacementString:(NSString *)string
{
    if (textField.tag == 0 && range.location >= 1) {
        [_secondTextField becomeFirstResponder];
        return YES;
    } else if (textField.tag == 1 && range.location >= 2) {
        [_thirdTextField becomeFirstResponder];
        return YES;
    } else if (textField.tag == 2 && range.location >= 1) {
        [_fourthTextField becomeFirstResponder];
        return YES;
    } else {
        return YES;
    }
}

...

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    // catched the delegates for the input textfields
    _firstTextField.delegate = self;
    _secondTextField.delegate = self;
    _thirdTextField.delegate = self;

    [_firstTextField becomeFirstResponder];
}

所以我有4个文本字段,前三个文本字段的字符数限制为1,2和1。现在的问题是光标不会移动到下一个文本字段,直到之后我输入更多文本。下一个文本位于新文本字段中,因此实现了整体效果,但光标在正确的时间没有移动。

我可以做什么,一旦达到字符限制,光标就会移动?

1 个答案:

答案 0 :(得分:1)

更好的方法是使用didChange方法,例如UITextViewDelegate方法,但我们知道UITextFieldDelegate没有didChange方法。您可以手动添加行为。您可以使用shouldChangeCharactersInRange:方法,但我个人建议您不要覆盖方法,除非您绝对不得不这样做。

您可以使用以下方式添加行为:

[yourTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

在目标方法中:

- (void)textFieldDidChange:(UITextField*)textField{

    if (textField.tag == 0 && textField.text.length == 1){

        [_secondTextField becomeFirstResponder];

    }else if (textField.tag == 1 && textField.text.length == 2){

        [_thirdTextField becomeFirstResponder];

    }else if (textField.tag == 2 && textField.text.length == 1){

        [_fourthTextField becomeFirstResponder];        
    }
}