Allowing single digit in UITextField in iOS

前端 未结 13 1416
耶瑟儿~
耶瑟儿~ 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

    It can be achieve using UITextField delegate & by setting Tag for each Textfield in increasing order (say 1 - 4), below is the delegate handler to solve the issue.

    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 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;
        }
    

提交回复
热议问题