Allowing single digit in UITextField in iOS

前端 未结 13 1275
耶瑟儿~
耶瑟儿~ 2020-12-05 03:55

I have a Verification ViewController, I get 4 digit verification code by SMS and I need to enter those code to login, I have created the ViewController

13条回答
  •  有刺的猬
    2020-12-05 04:14

    You can change the text field like this by using the delegate function of the text field. Initially, you need to set the delegate and the tag of each text field.

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

    Swift 2

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
        // On inputing value to textfield
        if (textField.text?.characters.count < 1  && string.characters.count > 0){
            let nextTag = textField.tag + 1;
    
            // get next responder
            var nextResponder = textField.superview?.viewWithTag(nextTag);
    
            if (nextResponder == nil){
                nextResponder = textField.superview?.viewWithTag(1);
            }
            textField.text = string;
            nextResponder?.becomeFirstResponder();
            return false;
        }
        else if (textField.text?.characters.count >= 1  && string.characters.count == 0){
            // on deleting value from Textfield
            let previousTag = textField.tag - 1;
    
            // get next responder
            var previousResponder = textField.superview?.viewWithTag(previousTag);
    
            if (previousResponder == nil){
                previousResponder = textField.superview?.viewWithTag(1);
            }
            textField.text = "";
            previousResponder?.becomeFirstResponder();
            return false;
        }
        return true;
    }
    

    Swift 4

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
        if textField.text!.count < 1  && string.count > 0{
            let nextTag = textField.tag + 1
    
            // get next responder
            var nextResponder = textField.superview?.viewWithTag(nextTag)
    
            if (nextResponder == nil){
    
                nextResponder = textField.superview?.viewWithTag(1)
            }
            textField.text = string
            nextResponder?.becomeFirstResponder()
            return false
        }
        else if textField.text!.count >= 1  && string.count == 0{
            // on deleting value from Textfield
            let previousTag = textField.tag - 1
    
            // get next responder
            var previousResponder = textField.superview?.viewWithTag(previousTag)
    
            if (previousResponder == nil){
                previousResponder = textField.superview?.viewWithTag(1)
            }
            textField.text = ""
            previousResponder?.becomeFirstResponder()
            return false
        }
        return true
    
    }
    

提交回复
热议问题