如何使 UITextField 只有一个文本/数字并使用 Next / Done 按钮浏览多个`UITextField`
Posted
技术标签:
【中文标题】如何使 UITextField 只有一个文本/数字并使用 Next / Done 按钮浏览多个`UITextField`【英文标题】:How can I enable the UITextField to have only one text/number and navigate through multiple `UITextField`s using Next / Done Button 【发布时间】:2015-04-22 11:44:23 【问题描述】:我必须使用(下一步/完成按钮)处理多个 UITextField
s 的导航,现在我必须在每个 UITextField
中只允许一个文本/数字我们如何在 UITextField
中做到这一点,如图所示下面
我最近使用了以下代码并且也能够实现但遇到问题,当我第一次在UITextField
中输入文本/数字时,它正在输入UITextField
并且当我输入下一个文本/数字时时间它仅用于推送到下一个UITextField
。我想要实现的是,当我第二次输入文本/数字时,它必须被推送到下一个UITextField
,并且值必须在下一个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 。但目前当它是 fill up 并且用户 click next text 那么只有 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;
【问题讨论】:
【参考方案1】:您可以通过使用 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;
编辑:
如果你想在文本字段跳转时显示输入文本,你可以在[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 标记置于条件下,当你输入最后一个文本字段的值时,它将退出键盘。希望这会对你有所帮助。
【讨论】:
我已经修改了问题你能帮我解决最近的问题吗 您好,您可以通过添加这两个 UITextField 来做到这一点 nextTextfield= (UITextField) [textField.superview viewWithTag:nextText]; [nextTextfield 设置文本:字符串]; [nextResponder becomefirstResponder] 之后的行;行编辑答案 它正在工作,但是当行的所有 4 个文本字段都已满并且用户再次在文本字段中输入文本时,它开始更改下一个文本字段的文本。我想阻止它 当行的所有 4 个文本字段已满时。它跳到下一行第一个文本字段。你不想要这种行为吗? 只有当 UITextField 为空时,一切正常 【参考方案2】:要在文本字段中仅输入数字并设置文本字段的长度,请尝试以下操作:
-(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;
【讨论】:
你能帮我投票吗【参考方案3】:设置文本字段的委托并实现以下委托方法:
- (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;
Set the maximum character length of a UITextField
【讨论】:
以上是关于如何使 UITextField 只有一个文本/数字并使用 Next / Done 按钮浏览多个`UITextField`的主要内容,如果未能解决你的问题,请参考以下文章
如何使 UIButton 导致 UITextField 开始编辑文本
如何使 UITextField 的文本在 iPhone 中以首字母大写显示
如何使光标的高度与 UITextField 中的文本高度相同?