【问题标题】:Textfield should becomesfirstresponder after entering four digits in another textfield在另一个文本字段中输入四位数字后,文本字段应成为第一响应者
【发布时间】:2014-06-17 10:11:58
【问题描述】:

我有两个 UITextfields 如下,

如果用户在第一个文本字段中输入 4 位数字,那么第二个文本字段应该成为第一响应者。我试过下面的代码,

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  int num = [textField.text length] - range.length;
  if(textField==pin && num ==4)
  {
    [cpin becomeFirstResponder];
  }
}

这就像,用户必须输入第五个数字。在第一个 UITextfield 中输入四位数字后,我希望第二个文本字段成为响应者。该怎么做?

【问题讨论】:

  • 将 num == 4 更改为 num == 3?
  • @CW0007007,如果我设置 num==3,则在 cpin 上输入第四个字母。
  • 将其更改为 + range.length 然后 4 应该可以工作,您从 num 计数中省略了新键入的字符。由于 textField 文本直到该方法返回后才会更新。您还需要返回 YES;从那个方法。
  • @CW0007007,请详细说明。

标签: ios objective-c uitextfield first-responder becomefirstresponder


【解决方案1】:

你需要省略 RANGE 参数..

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  if([textField.text length] == 3 && ![string isEqualToString:@""]) // Verify that replacementString is a digit and not a backspace
  {
    textField.text = [textField.text stringByAppendingString:string];
    [cpin becomeFirstResponder];
    return NO;
  }

  return YES;
} 

【讨论】:

  • @shai 如果我们在第一个文本字段中添加四位数字然后控制转到下一个文本字段但我们再次手动单击第一个文本字段并删除文本字段内容只有一个数字正在删除和控制转到下一个文本字段...请使其正确。
  • @AshwinMangrulkar,谢谢你的意见。是的,这是上面代码中的一个问题。但是我将文本字段条目类型设置为安全类型条目。所以,如果我删除一个文本,所有文本都消失了。
  • @AshwinMangrulkar,实际上他提到要检查答案中的退格键。为此添加了代码。 :)
【解决方案2】:

未经测试,因为我无权访问 IDE atm

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    int num = [textField.text length] + range.length;
    if(textField==pin && num ==4)
    {
        [cpin becomeFirstResponder];
    }
}

或者我确定您可以使用 int num = string.length 或将 int num 全部去掉,然后使用:if (textField == pin && string.length == 4)

【讨论】:

  • +1 为您提供建议,AppendingString:string 成功了。
【解决方案3】:

试试这个:

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
          int num = [textField.text length];
          if(textField==pin && num ==4) {
            [cpin becomeFirstResponder];
          }
         return YES;
    }

【讨论】:

    【解决方案4】:

    请试试这个。这应该工作

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)strin
    {
        int num = [textField.text length] - range.length;
        if(textField== pin && num ==4)
        {
            [cpin becomeFirstResponder];
            return NO;
        }
        return YES;
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-07
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多