如何以编程方式将光标移动到下一个UITextField?

时间:2009-12-08 06:32:13

标签: iphone objective-c ios uitextfield

我正在开发一个应用程序,我以编程方式创建一些UITextField,并且UITextField中允许最多1个字符。

这很完美。

但是在写完角色后,用户必须再次点击下一个UITextField来呈现键盘

键入1个字符后,光标应自动移至下一个UITextField

我该怎么做?

6 个答案:

答案 0 :(得分:16)

抓住通知您文本字段已更改的代理人。检查新长度是否为1.如果是,请在下一个字段上调用becomeFirstResponder

答案 1 :(得分:4)

我找到了这种方法..

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    if(textField == textField1)
    {
        if (textField1.text.length > 0  && range.length == 0 )
        {
            return NO;
        }
        else {
            [textField1 setText:newString];
            [textField2 becomeFirstResponder];
            return YES;
        }
    }
    else if(textField == textField2)
    {
        if (textField2.text.length > 0  && range.length == 0 )
        {
            return NO;
        }else {
            [textField2 setText:newString];
            [textField3 becomeFirstResponder];
            return YES;
        }
    }
}

我们可以用另一种方式做到...... 在viewDidLoad和该方法中声明此行。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endEditingTextField:) name:@"UITextFieldTextDidChangeNotification" object:txtfield1];

- (void) endEditingTextField:(NSNotification *)note {
    if ([[txtfield1 text] length] > 0)
    {
        [txtfield1 resignFirstResponder];
        [txtfield2 becomeFirstResponder];
    }
}

希望这会有所帮助......

答案 2 :(得分:3)

以上解决方案无效。这个解决方案对我有用:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    if(firstCodeField == textField){
        [firstCodeField setText:newString];
        [secondCodeField becomeFirstResponder];
    }
    if(secondCodeField == textField){
        [secondCodeField setText:newString];
        [thirdCodeField becomeFirstResponder];
    }

    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 1) ? NO : YES;
 }

答案 3 :(得分:1)

这可以通过3个简单步骤完成:

  1. 当前文本字段应该为光标重新签名。
  2. 计算以下文字字段
  3. 使以下文本字段获得光标。
  4. 在代码中:

    if ([currentTextFieldWithCursor canResignFirstResponder]) [currentTextFieldWithCursor resignFirstResponder];
    UITextField *followingTextField = // just get it!
    if ([followingTextField canBecomeFirstResponder]) [followingTextField becomeFirstResponder];
    

    希望它有所帮助。

答案 4 :(得分:1)

只需设置

  

UITextFieldDelegate

并在.m文件中使用此方法。它适用于OTP文本框。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    if(_txt1 == textField){
        if ([_txt1.text length] == 0) {
             [_txt1 setText:newString];
               [_txt2 becomeFirstResponder ];
        }

    }
    if(_txt2 == textField){

        if ([_txt2.text length] == 0) {
              [_txt2 setText:newString];
              [_txt3 becomeFirstResponder];
        }

    }

    if(_txt3 == textField){

         if ([_txt3.text length] == 0) {
              [_txt3 setText:newString];
               [_txt4 becomeFirstResponder];
         }

    }

    if(_txt4 == textField){

        if ([_txt4.text length] == 0) {
             [_txt4 setText:newString];
        }

    }

    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 1 && newLength == 2) ? NO : YES;
}

希望这对任何人都有用。 :)

答案 5 :(得分:0)

你只需要使用

[textField'sName becomeFirstResponder];