Last active
January 8, 2019 13:29
-
-
Save arpitjain03/559387f838c4de4d03024816bf7773d6 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
// | |
// 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