在 UITextField swift 3.0 中使用数字键盘以 dd-MM-yyyy 格式输入日期

Posted

技术标签:

【中文标题】在 UITextField swift 3.0 中使用数字键盘以 dd-MM-yyyy 格式输入日期【英文标题】:Entering Date in dd-MM-yyyy format using numeric keyboard in UITextField swift 3.0 【发布时间】:2017-02-13 09:43:05 【问题描述】:

我想在输入 UITextField 时格式化(dd-MM-yyyy)文本,我使用的是 swift 3.0,任何建议我该如何实现。

【问题讨论】:

我会建议,创建一个日期选择器,它以您想要的格式显示日期,并将该选择器视图作为该文本字段的输入视图。 到现在都没试过,不知道怎么实现 设计要求是用键盘而不是选择器来实现,日期选择器已经在工作 投反对票的请发表评论。 【参考方案1】:

像这样使用

// create one textfield
@IBOutlet var txtDOB: UITextField!
override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    // set delegate for your textfield
    txtDOB.delegate = self


//在textfield委托shouldChangeCharactersIn中调用你的函数

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 
    //Format Date of Birth dd-MM-yyyy

    //initially identify your textfield

    if textField == txtDOB 

        // check the chars length dd -->2 at the same time calculate the dd-MM --> 5
        if (txtDOB?.text?.characters.count == 2) || (txtDOB?.text?.characters.count == 5) 
            //Handle backspace being pressed
            if !(string == "") 
                // append the text
                txtDOB?.text = (txtDOB?.text)! + "-"
            
        
        // check the condition not exceed 9 chars
        return !(textField.text!.characters.count > 9 && (string.characters.count ) > range.length)
    
    else 
        return true
    

ObjectiveC

  - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
  
//Format Date of Birth dd-MM-yyyy

 if(textField == txtDOB)
    
    if ((txtDOB.text.length == 2)||(txtDOB.text.length == 5))
        //Handle backspace being pressed
        if (![string isEqualToString:@""])
            txtDOB.text = [txtDOB.text stringByAppendingString:@"-"];
    return !([textField.text length]>9 && [string length] > range.length);

else
    return YES;


【讨论】:

感谢 Anbu.Karthik,它按要求工作,如果您能提供帮助,请提出一个小问题。我只想要数字字符,数字键盘也有小数点。我怎样才能避免这种情况? @Haroon - 看到这个***.com/questions/30973044/…【参考方案2】:

为 Swift 5 更新

if textField == dateTextField 
            if dateTextField.text?.count == 2 || dateTextField.text?.count == 5 
                //Handle backspace being pressed
                if !(string == "") 
                    // append the text
                    dateTextField.text = dateTextField.text! + "."
                
            
            // check the condition not exceed 9 chars
            return !(textField.text!.count > 9 && (string.count ) > range.length)
         else 
            return true
        

【讨论】:

以上是关于在 UITextField swift 3.0 中使用数字键盘以 dd-MM-yyyy 格式输入日期的主要内容,如果未能解决你的问题,请参考以下文章

swift 验证失败时,在 UITextField 中自动显示错误图标

在 Swift 的 UITextfield 中显示用户输入的密码

如何在 Swift 中自动移动到下一个 UITextField

Swift 在 UITextField 中添加图标/图像

如何在 swift 中部分屏蔽 UITextField 文本?

显示用户在Swift中的UITextfield中键入的密码