Skip to content

Instantly share code, notes, and snippets.

@arpitjain03
Last active January 8, 2019 13:29
Show Gist options
  • Save arpitjain03/559387f838c4de4d03024816bf7773d6 to your computer and use it in GitHub Desktop.
Save arpitjain03/559387f838c4de4d03024816bf7773d6 to your computer and use it in GitHub Desktop.
//
// DatePicker.swift
// DatePicker
//
// Created by Arpit Jain on 08/01/19.
// Copyright © 2018 Arpit Jain. All rights reserved.
//
import UIKit
class DatePicker: NSObject {
// MARK: - Properties
static let shared = DatePicker()
private let kDateFormat = "yyyy-MM-dd"
private let toolbarBtnFont = UIFont.boldSystemFont(ofSize: 17.0)
private let toolbarColor = UIColor.gray
private let toolbarBtnColor = UIColor.white
private var selectedDateblock : ((String) -> Void)?
private var objDatePicker = UIDatePicker()
private var objViewController = UIViewController()
private var dateFormatter : DateFormatter{
let formatter = DateFormatter()
formatter.dateFormat = kDateFormat
formatter.dateStyle = .medium
return formatter
}
// MARK: -
/// Use this method to display **Date Picker** on any textfield.
///
/// - Parameters:
/// - textField: Object of textfield on which you need to an display DatePicker.
/// - controller: Object of controller on which you need to an display DatePicker.
/// - isForBirthDate: By default this property is false, if you are using date picker for picking birthdate set it to true.
/// - completionBlock: You will get the call back here when user selected the date.
func pickDate(textField : UITextField,
controller : UIViewController ,
isForBirthDate : Bool = false ,
completionBlock : @escaping (String) -> Void) {
objViewController = controller
textField.tintColor = UIColor.clear
objDatePicker.datePickerMode = .date
objDatePicker.backgroundColor = UIColor.white
if isForBirthDate{
objDatePicker.maximumDate = Date()
}
if !(textField.text?.isEmpty ?? false){
if let date = dateFormatter.date(from: textField.text!){
objDatePicker.setDate(date, animated: false)
}
}
let toolBar = UIToolbar()
toolBar.barStyle = .default
toolBar.isTranslucent = true
toolBar.barTintColor = toolbarColor
toolBar.tintColor = toolbarBtnColor
toolBar.sizeToFit()
let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(doneClick))
doneButton.setTitleTextAttributes([NSAttributedString.Key.font: toolbarBtnFont], for: UIControl.State.normal)
doneButton.setTitleTextAttributes([NSAttributedString.Key.font: toolbarBtnFont], for: UIControl.State.selected)
let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelClick))
cancelButton.setTitleTextAttributes([NSAttributedString.Key.font: toolbarBtnFont], for: UIControl.State.normal)
cancelButton.setTitleTextAttributes([NSAttributedString.Key.font: toolbarBtnFont], for: UIControl.State.selected)
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
toolBar.isUserInteractionEnabled = true
textField.inputView = objDatePicker
textField.inputAccessoryView = toolBar
selectedDateblock = completionBlock
}
// MARK: - Button Click Event
/// Done button click event
@objc func doneClick(){
let aString = dateFormatter.string(from: objDatePicker.date)
selectedDateblock!(aString)
objViewController.view.endEditing(true)
}
/// Cancel button click event
@objc func cancelClick() {
objViewController.view.endEditing(true)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment