Last active
November 23, 2016 12:44
-
-
Save ispiropoulos/63682404ef0ee9005aae85ade7d827d6 to your computer and use it in GitHub Desktop.
UITextField with Date picker
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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