Allowing single digit in UITextField in iOS

前端 未结 13 1458
耶瑟儿~
耶瑟儿~ 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 03:59

    swift 2.3

          class BankDepositsWithOTPVC: UIViewController {
    
                let limitLength = 1  
    
            override func viewDidLoad() {
                super.viewDidLoad()
            }
    
    
            }
    
            // MARK: Textfield Validator
    
            extension BankDepositsWithOTPVC : UITextFieldDelegate {
    
    
                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
                        let nextResponder = textField.superview?.viewWithTag(nextTag);
    
                        if (nextResponder == nil){
                            textField.resignFirstResponder()
                          //  nextResponder = textField.superview?.viewWithTag(1);
                        }
                        textField.text = string;
                        nextResponder?.becomeFirstResponder();
                        return false;
    
                    }else  if (textField.text?.characters.count >= 1  && string.characters.count > 0){
                                        // maximum 1 digit
    
    textField.text = "";
    
                        let nextTag = textField.tag + 1;
    
                        // get next responder
                        let nextResponder = textField.superview?.viewWithTag(nextTag);
    
                        if (nextResponder == nil){
                            textField.resignFirstResponder()
                            //  nextResponder = textField.superview?.viewWithTag(1);
                        }
                        textField.text = string;
                        nextResponder?.becomeFirstResponder();
                        return false;
                    }
                    else if (textField.text?.characters.count >= 1  && string.characters.count == 0){
                        // on deleteing 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;
    
                    guard let text = textField.text else { return true }
                    let newLength = text.characters.count + string.characters.count - range.length
                    return newLength <= limitLength
    
                }
    
            }
    

    Objective-C

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    
        if ((textField.text.length < 1) && (string.length > 0))
        {
    
            NSInteger nextTag = textField.tag + 1;
            UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];
            if (! nextResponder){
                [textField resignFirstResponder];
            }
            textField.text = string;
            if (nextResponder)
                [nextResponder becomeFirstResponder];
    
            return NO;
    
        }else if ((textField.text.length >= 1) && (string.length > 0)){
            //FOR MAXIMUM 1 TEXT
    
            NSInteger nextTag = textField.tag + 1;
            UIResponder* nextResponder = [textField.superview viewWithTag:nextTag];
            if (! nextResponder){
                [textField resignFirstResponder];
            }
            textField.text = string;
            if (nextResponder)
                [nextResponder becomeFirstResponder];
    
            return NO;
        }
        else if ((textField.text.length >= 1) && (string.length == 0)){
            // on deleteing value from Textfield
    
            NSInteger prevTag = textField.tag - 1;
            // Try to find prev responder
            UIResponder* prevResponder = [textField.superview viewWithTag:prevTag];
            if (! prevResponder){
                [textField resignFirstResponder];
            }
            textField.text = string;
            if (prevResponder)
                // Found next responder, so set it.
                [prevResponder becomeFirstResponder];
    
            return NO;
        }
    
          return YES;
    }
    

提交回复
热议问题