如何启用UITextField只有一个文本/数字,并使用下一个/完成按钮导航多个`UITextField` [英] How can I enable the UITextField to have only one text/number and navigate through multiple `UITextField`s using Next / Done Button

查看:90
本文介绍了如何启用UITextField只有一个文本/数字,并使用下一个/完成按钮导航多个`UITextField`的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须使用(下一个/完成按钮)处理多个 UITextField 的导航,现在我必须在每个 UITextField 我们如何在 UITextField 中执行此操作,如下图所示

I have to handle navigate through multiple UITextFields 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆