在swift中将UITextField设置为mm-dd-yy格式

时间:2016-07-26 14:12:23

标签: ios swift date uitextfield

所以我希望UITextField只接受数字,通过使用自定义键盘输入解决这个问题。

这个UITextField的目的是让某人生日快乐。我不想使用UIDatePicker强硬,因为我不喜欢它的样子。

我希望TextField会在用户输入TextField后的每两位数后自动插入破折号。

dd-mm-yy是占位符文字。我要么想要永久破折号,要么我也不知道怎么做。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您希望允许用户在此 dd-mm-yy 中的文本字段中输入文字吗? 如果它,我相信这会对你有所帮助。

  1. 在你的班级顶部声明我们稍后会使用的这个变量。

    var dateFormate = Bool()
    
  2. 为该文字字段添加委托和代码

  3. 然后添加以下委托方法

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    
    //1. To make sure that this is applicable to only particular textfield add tag.
    if textField.tag == 1 {
        //2. this one helps to make sure that user enters only numeric characters and '-' in fields
        let numbersOnly = NSCharacterSet(charactersInString: "1234567890-")
        let characterSetFromTextField = NSCharacterSet(charactersInString: string)
    
        let Validate:Bool = numbersOnly .isSupersetOfSet(characterSetFromTextField)
        if !Validate {
            return false;
        }
        if range.length + range.location > textField.text?.characters.count {
            return false
        }
        let newLength = (textField.text?.characters.count)! + string.characters.count - range.length
        if newLength == 3 || newLength == 6 {
            let  char = string.cStringUsingEncoding(NSUTF8StringEncoding)!
            let isBackSpace = strcmp(char, "\\b")
    
            if (isBackSpace == -92) {
                dateFormate = false;
            }else{
                dateFormate = true;
            }
    
            if dateFormate {
                let textContent:String!
                textContent = textField.text
                //3.Here we add '-' on overself.
                let textWithHifen:NSString = "\(textContent)-"
                textField.text = textWithHifen as String
                dateFormate = false
            }
        }
        //4. this one helps to make sure only 8 character is added in textfield .(ie: dd-mm-yy)
        return newLength <= 8;
    
    }
    return true
    }
    
  4. 现在用户可以输入他们的DOB.No需要担心&#39; - &#39;它会自动添加。

  5. 斯威夫特3:

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    
        //1. To make sure that this is applicable to only particular textfield add tag.
        if textField.tag == 1 {
            //2. this one helps to make sure that user enters only numeric characters and '-' in fields
            let numbersOnly = CharacterSet(charactersIn: "1234567890-")
    
            let Validate = string.rangeOfCharacter(from: numbersOnly.inverted) == nil ? true : false
            if !Validate {
                return false;
            }
            if range.length + range.location > textField.text?.characters.count {
                return false
            }
            let newLength = (textField.text?.characters.count)! + string.characters.count - range.length
            if newLength == 3 || newLength == 6 {
                let  char = string.cString(using: NSUTF8StringEncoding)!
                let isBackSpace = strcmp(char, "\\b")
    
                if (isBackSpace == -92) {
                    dateFormate = false;
                }else{
                    dateFormate = true;
                }
    
                if dateFormate {
                    let textContent:String!
                    textContent = textField.text
                    //3.Here we add '-' on overself.
                    let textWithHifen:NSString = "\(textContent)-"
                    textField.text = textWithHifen as String
                    dateFormate = false
                }
            }
            //4. this one helps to make sure only 8 character is added in textfield .(ie: dd-mm-yy)
            return newLength <= 8;
    
        }
        return true
    }