DatePickerTextField.swift 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. //
  2. // SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
  3. // SPDX-License-Identifier: GPL-3.0-or-later
  4. //
  5. @objcMembers class DatePickerTextField: UITextField {
  6. public let datePicker = UIDatePicker()
  7. override init(frame: CGRect) {
  8. super.init(frame: frame)
  9. self.commonInit()
  10. }
  11. required init?(coder: NSCoder) {
  12. super.init(coder: coder)
  13. self.commonInit()
  14. }
  15. private func commonInit() {
  16. self.tintColor = .clear
  17. }
  18. public func getDate(startingDate: Date?, minimumDate: Date?, completion: @escaping (Date) -> Void) {
  19. guard self.canBecomeFirstResponder else {
  20. return
  21. }
  22. datePicker.datePickerMode = .dateAndTime
  23. datePicker.locale = .current
  24. datePicker.preferredDatePickerStyle = .wheels
  25. if let startingDate {
  26. datePicker.date = startingDate
  27. }
  28. if let minimumDate {
  29. datePicker.minimumDate = minimumDate
  30. }
  31. self.inputView = datePicker
  32. let cancelButton = UIBarButtonItem(systemItem: .cancel, primaryAction: UIAction { [weak self] _ in
  33. self?.resignFirstResponder()
  34. })
  35. let doneButton = UIBarButtonItem(systemItem: .done, primaryAction: UIAction { [weak self] _ in
  36. if let self {
  37. completion(self.datePicker.date)
  38. self.resignFirstResponder()
  39. }
  40. })
  41. let toolBar = UIToolbar(frame: .init(x: 0, y: 0, width: 320, height: 44))
  42. toolBar.setItems([cancelButton, UIBarButtonItem(systemItem: .flexibleSpace), doneButton], animated: false)
  43. self.inputAccessoryView = toolBar
  44. self.becomeFirstResponder()
  45. }
  46. }