【问题标题】:Set UITextField to mm-dd-yy format in swift快速将 UITextField 设置为 mm-dd-yy 格式
【发布时间】:2016-07-26 14:12:23
【问题描述】:

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

UITextField 的目的是为某人过生日。我不想使用UIDatePicker,因为我不喜欢它的外观。

我希望TextField 在用户输入TextField 的每个第二个数字后自动插入破折号。

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

我该怎么做?

【问题讨论】:

标签: ios swift date uitextfield


【解决方案1】:

您希望允许用户在此 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. 现在用户可以输入他们的出生日期了。不用担心会自动添加“-”。

斯威夫特 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
}

【讨论】:

    【解决方案2】:

    Swift5 // 使用文本域委托shouldChangeCharactersIn

     func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
          if (textField.text?.count == 2) || (textField.text?.count == 5) {
               if !(string == "") {
                    textField.text = (textField.text)! + "-"
                   }
                }
           return !(textField.text!.count > 7 && (string.count ) > range.length)
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 2022-10-14
      • 2022-01-25
      • 1970-01-01
      • 2012-03-05
      • 2012-01-27
      相关资源
      最近更新 更多