uiresponder 下一个文本字段在 keyEvent 之后成为FirstResponder

Posted

技术标签:

【中文标题】uiresponder 下一个文本字段在 keyEvent 之后成为FirstResponder【英文标题】:uiresponder next textfield becomeFirstResponder after keyEvent 【发布时间】:2012-06-15 06:11:14 【问题描述】:

我有 4 个水平文本字段。每个 textFiled 将只允许四个字符。如果用户输入四个字符,则焦点应更改为下一个文本字段,而无需任何用户交互。通过使用下面的代码,我可以切换到下一个 textFiled,但只有在从键盘输入任何字符之后。我的要求是在输入四个字符后自动关注下一个文件。请帮助我。提前致谢。

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

if ( range.location  >= 4 ) 
  textField.text = string;        
    UIResponder* nextResponder = [textField.superview viewWithTag:(textField.tag + 1)];
    if (nextResponder)            
        [textField resignFirstResponder];            
        [nextResponder becomeFirstResponder];          
            
    return NO;
    
return YES;

【问题讨论】:

【参考方案1】:

你可以在这个方法中使用这样的东西:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField 

    if(theTextField == firstField)
    
        [secondField becomeFirstResponder];
        return YES;
    

    if(theTextField == secondField)
    
        [thirdField becomeFirstResponder];
        [theTextField resignFirstResponder];
        return YES;
    

    if(theTextField == thirdField)
    
        [thirdField becomeFirstResponder];
        [theTextField resignFirstResponder];
        return YES;
    
    [theTextField resignFirstResponder];
    return YES;

【讨论】:

您好,感谢您的快速回复。通过使用我的代码,我可以在输入 4 个字母后在 textFields 之间切换。问题是单击第五个字母后焦点更改为第二个 textFiled,但第五个字母未显示在第二个文本 textField 中,因为它作为用户事件切换到下一个。我的要求是,如果用户单击第五个字母,它应该显示在第二个文本字段中。谢谢你。 我认为 Abhishek 的回答是对的。这是我想到的下一个答案。【参考方案2】:
//try to this code 


- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
  if ([[textField text] length] + [string length] - range.length > 4) 

    textField.text = string;        
   UIResponder* nextResponder = [textField.superview viewWithTag:(textField.tag + 1)];
   if (nextResponder)            
      [textField resignFirstResponder];            
      [nextResponder becomeFirstResponder];          
     

    return YES; 

希望对你有帮助

【讨论】:

感谢所有回复.. 但很抱歉没有工作。 @iApple 是的,你的权利我需要与 textFields 相同的方式。 @Kumar 做一件事.. 你只需从你的代码中删除 return No ...尝试并请让我知道.... 感谢您的建议。它已经开始工作,但我面临另一个问题,例如 textField.tag 值是 0、1、2、3。但是在使用键盘 textField 导航键入时,会发生 0->2->3(1 缺少 0->2)。我不明白这背后的原因..谢谢。 不要将标签 0 设置为 null 尝试从 1.2 开始。依此类推,我要编辑上面的代码使用只是把它投赞成票,对的可能对其他人有用....【参考方案3】:

我认为你需要这样的东西, https://github.com/lashad/PTPasscodeViewController

【讨论】:

【参考方案4】:

尝试替换这个

if ( range.location  >= 4 )

if ( range.location  >= 3 )

【讨论】:

以上是关于uiresponder 下一个文本字段在 keyEvent 之后成为FirstResponder的主要内容,如果未能解决你的问题,请参考以下文章

当用户在文本字段中快速输入键时如何显示键的值

UIResponder 和事件传递的另一个问题

需要 UIResponder 链说明

UIResponder 链题

在 Flutter 中将焦点从一个文本字段更改为下一个文本字段

文本字段一个字符并自动更改为下一个文本字段?不起作用?