如何启用UITextField只有一个文本/数字,并使用下一个/完成按钮导航多个`UITextField` [英] How can I enable the UITextField to have only one text/number and navigate through multiple `UITextField`s using Next / Done Button
问题描述
我必须使用(下一个/完成按钮)处理多个 UITextField
的导航,现在我必须在每个 UITextField
我们如何在 UITextField
中执行此操作,如下图所示
I have to handle navigate through multiple UITextField
s using (Next / Done Button) and now I have to allow only one text/number in each UITextField
how could we do that in UITextField
as shown in image below
< img src =https://i.stack.imgur.com/N027v.pngalt =在此输入图像说明>
我最近使用了以下代码并且能够实现,但遇到问题,当我第一次输入 UITextField
中的文本/数字时,它被输入 UITextField
当我第二次输入下一个文本/数字时,它仅用于推送到下一个 UITextField
。我想要实现的是,当我第二次输入文本/数字时,必须将其推送到下一个 UITextField
以及必须在下一个 UITextField
I have used following code recently and was able to achieve too but got problem that When I first enter the text/number in UITextField
it is being entered in UITextField
and when I enter the next text/number for second time it is being used only to push to next UITextField
. I want to achieve is that when i enter the text/number for second time it must be pushed to next UITextField
as well as value must be entered in next 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
I solve my problem using following code but I got a one more problem left. For the last UITextField i need it to resignFirstResponder immediately after it is filled up. But in current when it is fill up and user click next text then only resignFirstResponder is happening
- (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
you can do this by using textfield delegate Method you can set tags to each text field in sequence like 1,2,3…. now in shouldChangeCharactersInRange
当您在文本框中键入一个文本/数字时,使下一个框成为第一响应者的方法权限逻辑。
Method right logic that make next box to become first responder when you type one text/number in text box.
如下所示
- (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;
}
编辑:
如果要在文本字段的跳转中显示输入文本alos,可以在 [nextResponder becomeFirstResponder]
If you want to Display enter text alos on jump of textfield you can add these lines after [nextResponder becomeFirstResponder]
添加下面给出的这些行
UITextField nextTextfield= (UITextField) [textField.superview viewWithTag:nextText];
[nextTextfield setText:string];
编辑上一个文本字段中键盘的resign responder。
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标记置于条件中,它将使键盘重新签名。希望这会对你有所帮助。
This in this we check for last text tag here i check for 4 tag value u put ur last textfiedl tag in condition when u enter value for last textfield it will resign keyboard. hope this will help you.
这篇关于如何启用UITextField只有一个文本/数字,并使用下一个/完成按钮导航多个`UITextField`的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!