Skip to content

Instantly share code, notes, and snippets.

@ispiropoulos
Last active November 23, 2016 12:44
Show Gist options
  • Save ispiropoulos/63682404ef0ee9005aae85ade7d827d6 to your computer and use it in GitHub Desktop.
Save ispiropoulos/63682404ef0ee9005aae85ade7d827d6 to your computer and use it in GitHub Desktop.
UITextField with Date picker
//
// JSDateField.swift
//
//
// Created by John Spiropoulos on 21/11/2016.
// Copyright © 2016 Programize. All rights reserved.
//
import UIKit
class JSDateField: UITextField {
private var privateDate: Date?
var date: Date? {
set {
privateDate = newValue
if !isFirstResponder {
datePicker.setDate(newValue!, animated: false)
}
}
get {
return privateDate
}
}
private lazy var dateFormatter = DateFormatter()
@IBInspectable var dateFormat: String = "dd/MM/yyyy" {
didSet {
dateFormatter.dateFormat = dateFormat
}
}
private lazy var datePicker = UIDatePicker()
var datePickerMode: UIDatePickerMode = .date {
didSet {
datePicker.datePickerMode = datePickerMode
}
}
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
private func initialize() {
datePicker.maximumDate = Date()
datePicker.timeZone = TimeZone.current
dateFormatter.timeZone = TimeZone.current
dateFormatter.dateFormat = dateFormat
if date != nil {
datePicker.setDate(date!, animated: false)
}
datePicker.addTarget(self, action: #selector(didSelectDate(_:)), for: .valueChanged)
datePicker.datePickerMode = datePickerMode
datePicker.timeZone = .current
inputView = datePicker
}
@objc private func didSelectDate(_ sender: UIDatePicker) {
date = sender.date
text = dateFormatter.string(from: sender.date)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment