//
// UICustomDatePicker.swift
// ANAPAY
//
// Created by DBS部 電通國際情報サービス on 2019/11/12.
// Copyright © 2019 isid. All rights reserved.
//
import UIKit
struct CustomDatePickerSet {
//UITextfieldに紐づいてる
weak var dateField: UITextField?
//UIDatePickerを定義するための変數
var datePicker: UIDatePicker
//日付のフォーマット
var dateFormatter: DateFormatter
init(dateField: UITextField, defaultDate: String, strDateformat: String = "yyyy年MM月dd日") {
self.dateField = dateField
self.datePicker = UIDatePicker()
// ピッカー設定
self.datePicker.datePickerMode = .date
self.datePicker.locale = Locale(identifier: "ja_JP")
self.datePicker.minimumDate = Calendar.current.date(from: DateComponents(year: 1900, month:1, day:1))
self.datePicker.maximumDate = Date()
self.dateField?.inputView = datePicker
self.dateFormatter = DateFormatter();
self.dateFormatter.dateFormat = strDateformat
// デフォルト日付設定する
self.datePicker.date = dateFormatter.date(from: defaultDate)!
}
}
extension CustomDatePickerSet {
mutating func setTextField() {
//datePickerで指定した日付が表示される
self.dateField?.text = "\(self.dateFormatter.string(from: self.datePicker.date))"
self.dateField?.endEditing(true)
}
}
class UIDatePickButtonItem: UIBarButtonItem {
var cDatePicker: CustomDatePickerSet?
}
class CustomDatePicker: NSObject {
private static let shared = CustomDatePicker()
private override init() {
super.init()
}
static func create(dateField: UITextField, defaultDate: String = "1990年01月01日") {
shared.createDatePicker(dateField: dateField, defaultDate: defaultDate)
}
private func createDatePicker(dateField: UITextField, defaultDate: String) {
let cDatePicker = CustomDatePickerSet(dateField: dateField, defaultDate: defaultDate)
// 決定バーの生成
let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: cDatePicker.datePicker.frame.size.width, height: 30))
let spaceItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
let doneItem = UIDatePickButtonItem(title: "完了", style: .done, target: self, action: #selector(done(_:)))
doneItem.tintColor = UIColor.init(hexcode: "#5BADE1")
doneItem.cDatePicker = cDatePicker
toolbar.setItems([spaceItem, doneItem], animated: false)
toolbar.sizeToFit()
// インプットビュー設定(紐づいているUITextfieldへ代入)
cDatePicker.dateField?.inputAccessoryView = toolbar
cDatePicker.dateField?.delegate = self
}
// UIDatePickerのDoneを押したら発火
@objc func done(_ sender: UIDatePickButtonItem) {
sender.cDatePicker?.setTextField()
}
}
extension CustomDatePicker: UITextFieldDelegate {
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
textField.isUserInteractionEnabled = false
return true
}
func textFieldDidEndEditing(_ textField: UITextField) {
textField.isUserInteractionEnabled = true
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return false
}
}
自定義UI控件:datePicker日期的下拉列表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.