Formatting a UITextField for credit card input like (xxxx xxxx xxxx xxxx)

前端 未结 28 2157
长情又很酷
长情又很酷 2020-11-28 01:19

I want to format a UITextField for entering a credit card number into such that it only allows digits to be entered and automatically inserts spaces so that the

28条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-11-28 01:59

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
        {
            if textField == CardNumTxt
            {
                let replacementStringIsLegal = string.rangeOfCharacterFromSet(NSCharacterSet(charactersInString: "0123456789").invertedSet) == nil
    
                if !replacementStringIsLegal
                {
                    return false
                }
    
                let newString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
                let components = newString.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: "0123456789").invertedSet)
    
                let decimalString = components.joinWithSeparator("") as NSString
                let length = decimalString.length
                let hasLeadingOne = length > 0 && decimalString.characterAtIndex(0) == (1 as unichar)
    
                if length == 0 || (length > 16 && !hasLeadingOne) || length > 19
                {
                    let newLength = (textField.text! as NSString).length + (string as NSString).length - range.length as Int
    
                    return (newLength > 16) ? false : true
                }
                var index = 0 as Int
                let formattedString = NSMutableString()
    
                if hasLeadingOne
                {
                    formattedString.appendString("1 ")
                    index += 1
                }
                if length - index > 4
                {
                    let prefix = decimalString.substringWithRange(NSMakeRange(index, 4))
                    formattedString.appendFormat("%@-", prefix)
                    index += 4
                }
    
                if length - index > 4
                {
                    let prefix = decimalString.substringWithRange(NSMakeRange(index, 4))
                    formattedString.appendFormat("%@-", prefix)
                    index += 4
                }
                if length - index > 4
                {
                    let prefix = decimalString.substringWithRange(NSMakeRange(index, 4))
                    formattedString.appendFormat("%@-", prefix)
                    index += 4
                }
    
    
                let remainder = decimalString.substringFromIndex(index)
                formattedString.appendString(remainder)
                textField.text = formattedString as String
                return false
            }
            else
            {
                return true
            }
        }
    

    formattedString.appendFormat("%@-", prefix) chage of "-" any other your choose

提交回复
热议问题