我如何使UITextField只有一个文本/数字,并使用Next / Donebutton浏览多个“UITextField”

我必须使用(下一步/完成button)处理多个UITextField的导航,现在我只需要在每个UITextField只允许一个文本/数字,我们如何在UITextField做到这一点,如下图所示

在这里输入图像说明

我最近使用了下面的代码,也能够实现,但得到的问题是,当我第一次input文本/数字在UITextField中input到UITextField ,当我第二次input下一个文本/数字时,它只用于推到下一个UITextField 。 我想实现的是,当我第二次input文本/数字时,它必须推到下一个UITextField以及值必须input在下一个UITextField

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (textField.tag<10) { if ((textField.text.length >= 1) && (string.length > 0)) { NSInteger nextText = textField.tag + 1; // Try to find next responder UIResponder* nextResponder = [textField.superview viewWithTag:nextText]; if (! nextResponder) [textField resignFirstResponder]; // nextResponder = [textField.superview viewWithTag:1]; if (nextResponder){ // Found next responder, so set it. [nextResponder becomeFirstResponder]; return NO; } } } return YES; } 

我使用下面的代码解决了我的问题,但是我还有一个问题 。 对于最后一个UITextField,我需要它填满后立即resignFirstResponder。 但是,在当前填写和用户点击下一个文本,然后只resignFirstResponder正在发生

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (textField.tag<10) { if ((textField.text.length >= 1) && (string.length > 0)) { NSInteger nextText = textField.tag + 1; UIResponder* nextResponder = [textField.superview viewWithTag:nextText]; if (! nextResponder) [textField resignFirstResponder]; if (nextResponder){ [nextResponder becomeFirstResponder]; UITextField* nextTextfield= (UITextField*) [textField.superview viewWithTag:nextText]; if ((nextTextfield.text.length < 1)){ [nextTextfield setText:string]; } return NO; } } } return YES; } 

你可以通过使用textfield委托方法来做到这一点,您可以按顺序设置标签到每个文本字段像1,2,3 …。 现在在shouldChangeCharactersInRange

当您在文本框中键入一个文本/数字时,使下一个框成为第一响应者的方法权逻辑。

如下所示

  - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if ((textField.text.length >= 1) && (string.length > 0)) { NSInteger nextText = textField.tag + 1; // Try to find next responder UIResponder* nextResponder = [textField.superview viewWithTag:nextText]; if (! nextResponder) nextResponder = [textField.superview viewWithTag:1]; if (nextResponder) // Found next responder, so set it. [nextResponder becomeFirstResponder]; return NO; } return YES; } 

编辑:

如果你想显示文本字段跳转input文本[nextResponder becomeFirstResponder]你可以添加这些行[nextResponder becomeFirstResponder]

添加下面给出的这些行

  UITextField nextTextfield= (UITextField) [textField.superview viewWithTag:nextText]; [nextTextfield setText:string]; 

在最后一个文本框中编辑键盘退出响应者。

 If you want resign responder for last textfield - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (textField.tag<10) { if ((textField.text.length >= 1) && (string.length > 0)) { NSInteger nextText = textField.tag + 1; // Try to find next responder UIResponder* nextResponder = [textField.superview viewWithTag:nextText]; if (! nextResponder) [textField resignFirstResponder]; // nextResponder = [textField.superview viewWithTag:1]; if (nextResponder){ // Found next responder, so set it. [nextResponder becomeFirstResponder]; UITextField *nextTextfield= (UITextField*) [textField.superview viewWithTag:nextText]; if (nextTextfield.text.length<1) { if(nextTextfield.tag==4){ [nextTextfield setText:string]; [nextTextfield resignFirstResponder]; }else{ [nextTextfield setText:string]; } } return NO; } } } return YES; } 

这在这里我们检查最后一个文本标签在这里我检查4标签值你把你最后的textfiedl标签条件当你为最后的文本域input值它将退出键盘。 希望这会帮助你。

要只在您的文本字段中input数字并设置文本字段的长度,请尝试以下操作:

 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ // Check for non-numeric characters NSUInteger lengthOfString = string.length; for (NSInteger loopIndex = 0; loopIndex < lengthOfString; loopIndex++) { unichar character = [string characterAtIndex:loopIndex]; if (character < 48) return NO; // 48 unichar for 0 if (character > 57) return NO; // 57 unichar for 9 } // Check for total length NSUInteger proposedNewLength = textField.text.length - range.length + string.length; if (proposedNewLength > 1) return NO; //set your length here return YES; } 

设置文本字段的委托并实现下面的委托方法:

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { // Prevent crashing undo bug – see note below. if(range.length + range.location > textField.text.length) { return NO; } NSUInteger newLength = [textField.text length] + [string length] - range.length; return (newLength > 25) ? NO : YES; } 

设置UITextField的最大字符长度