Popover + DatePicker swift
Имеется основной ViewController с .popover, представленном в виде DatePicker (прошу прощения если формулировка не верная, надеюсь основная мысль понятна). Выбранная дата передается назад протоколом, меняя при этом название кнопки. Вопрос следующий: как добавить toolbar с кнопками ок и отмена. И как задать конкретное направление для появления .popover (например всегда вниз). Так как на разных устройствах он может появится левее кнопки, правее, выше, или ниже. Подробнее в коде и скринах
.
//Основной контроллер с popover
`@IBAction func datePickerAction(_ sender: Any) {
guard let datePickerVC = storyboard?.instantiateViewController(identifier: "DatePickerViewController") as? DatePickerViewController else { return }
datePickerVC.modalPresentationStyle = .popover
datePickerVC.delegate = self
let popOverVC = datePickerVC.popoverPresentationController
popOverVC?.delegate = self
popOverVC?.sourceView = self.dateButton
popOverVC?.sourceRect = CGRect(x: self.dateButton.bounds.midX, y: self.dateButton.bounds.maxY, width: 0, height: 0)
datePickerVC.preferredContentSize = CGSize(width: 250, height: 250)
self.present(datePickerVC, animated: true)
}
}
extension FuelCarsViewController: DatePickerViewControllerDelegate {
func transferDate(_ date: String) {
dateButton.setTitle(date, for: .normal)
transferDate = date
}
}`
//Контроллер с DatePicker
import UIKit
protocol DatePickerViewControllerDelegate {
func transferDate(_ date: String)
}
class DatePickerViewController: BackgroundVC {
@IBOutlet weak var datePicker: UIDatePicker!
var delegate: DatePickerViewControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
var components = DateComponents()
components.year = -20
let minDate = Calendar.current.date(byAdding: components, to: Date())
datePicker.minimumDate = minDate
datePicker.maximumDate = NSDate() as Date
datePicker.datePickerMode = .date
datePicker.preferredDatePickerStyle = .wheels
datePicker.setValue(UIColor.white, forKeyPath: "textColor")
datePicker.setValue(false, forKey: "highlightsToday")
let localeID = Locale.preferredLanguages.first
datePicker.locale = Locale(identifier: localeID!)
datePicker.addTarget(self, action: #selector(dateChanged), for: .valueChanged)
}
@objc func dateChanged(picker: UIDatePicker){
let formatter = DateFormatter()
formatter.dateFormat = "dd.MM.yyyy"
let date = formatter.string(from: picker.date)
delegate?.transferDate(date)
//dismiss(animated: true, completion: nil)
}
}