【问题标题】:How to move the cursor to next UITextField programmatically?如何以编程方式将光标移动到下一个 UITextField?
【发布时间】:2009-12-08 06:32:12
【问题描述】:

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

这是完美的工作。

但写完字符后,用户必须再次点击下一个UITextField 才能显示键盘

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

我该怎么做?

【问题讨论】:

    标签: iphone objective-c ios uitextfield


    【解决方案1】:

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

    【讨论】:

    • [textField becomeFirstResponder]
    【解决方案2】:

    我找到了这种方法..

    - (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];
        }
    }
    

    希望这会有所帮助...

    【讨论】:

      【解决方案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;
       }
      

      【讨论】:

        【解决方案4】:

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

        1. 当前文本字段应该为光标退出。
        2. 计算以下文本字段
        3. 使以下文本字段获得光标。

        在代码中:

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

        希望对你有帮助。

        【讨论】:

          【解决方案5】:

          设置一下

          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;
          }
          

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

          【讨论】:

            【解决方案6】:

            你必须使用

            [textField'sName becomeFirstResponder];
            

            【讨论】:

              猜你喜欢
              • 2011-03-10
              • 2010-10-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-05-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多