ios - 点击日期字段时如何调出日期选择器?

标签 ios swift datepicker

我有一个带有日期文本字段的 View 。我希望当前日期默认为“今天”,但如果用户想输入不同的日期,他可以点击该字段以调出日期选择器(已添加到 View 中)。我发现了一个类似的问题和答案,我虽然会工作。我没有错误,但是当我点击日期字段时,会出现键盘,而不是日期选择器。

@IBOutlet var enterDate: UITextField!

@IBAction func dateTapped(sender: UITextField) {

    //code for what to do when date field is tapped
    var datePickerView  : UIDatePicker = UIDatePicker()
    datePickerView.datePickerMode = UIDatePickerMode.Date
    sender.inputView = datePickerView
    datePickerView.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged)
}

func handleDatePicker(sender: UIDatePicker) {
    var dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "dd MMM yyyy"
    enterDate.text = dateFormatter.stringFromDate(sender.date)
}

最佳答案

创建 UITextField 的扩展并添加以下方法。

 extension UITextField {

   func addInputViewDatePicker(target: Any, selector: Selector) {

    let screenWidth = UIScreen.main.bounds.width

    //Add DatePicker as inputView
    let datePicker = UIDatePicker(frame: CGRect(x: 0, y: 0, width: screenWidth, height: 216))
    datePicker.datePickerMode = .date
    self.inputView = datePicker

    //Add Tool Bar as input AccessoryView
    let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: screenWidth, height: 44))
    let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    let cancelBarButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelPressed))
    let doneBarButton = UIBarButtonItem(title: "Done", style: .plain, target: target, action: selector)
    toolBar.setItems([cancelBarButton, flexibleSpace, doneBarButton], animated: false)

    self.inputAccessoryView = toolBar
 }

   @objc func cancelPressed() {
     self.resignFirstResponder()
   }
}

在 ViewController 中添加一个 UITextField 并创建 IBOutlet:-

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var DOBTextField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    DOBTextField.addInputViewDatePicker(target: self, selector: #selector(doneButtonPressed))

}

@objc func doneButtonPressed() {
    if let  datePicker = self.DOBTextField.inputView as? UIDatePicker {
        let dateFormatter = DateFormatter()
        dateFormatter.dateStyle = .medium
        self.DOBTextField.text = dateFormatter.string(from: datePicker.date)
    }
    self.DOBTextField.resignFirstResponder()
 }
}

关于ios - 点击日期字段时如何调出日期选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29688430/

相关文章:

ios - 如何设置在 UITextField 中添加的图标的位置?

Xcode "Expected Delcaration","Expression not allowed at the top level"错误

ios - 快速错误 : NSInternalInconsistencyException, 'Upload attempting to execute on non main queue! Only on the main queue.'

android - 如何为 iOS、Android、BBerry、Symbian 创建 Web 应用程序

ios - 打开应用程序时表格 View 未刷新

jquery - 删除jquery datepicker中的默认日期

javascript - Jquery - 日期选择器日期

ios - NotificationCenter 添加观察者(观察者 :selector:name:object) -- what is object?

ios - 点击后退或关闭时加载页面的最佳实践 : In swift 3

WPF DatePicker 文本框白色边框不可编辑