Я хочу создать приложение, такое как Календарь по умолчанию для iOS.У меня есть две стороны экрана.Верхняя сторона - containerView
с pageviewcontroller
, где пользователь может выбрать день недели.Внизу containerView
с pageviewcontroller
, где таблица с вещами на каждый день.
В topContainerView
я создал функцию pageViewController
, которая создает контроллер представления с 7 днями и кнопками длякаждый день.Я хочу, когда кто-то нажмет.день для смены контроллера вида после и до с pageViewController
.Я сделал делегат протокола для каждого контроллера недели, и при нажатии на день контроллер страницы недели изменит день, но контроллер представления после и до не изменится.
class WeekPageController: UIPageViewController {
// MARK: - IBOutlets & vars -
var currentDate = Date()
var presentedController: WeekController!
weak var calendarDelegate: CalendarDelegate?
// MARK: - IBActions & fat -
private func getPage(data: Date) -> WeekController? {
guard let page = storyboard?.instantiateViewController(withIdentifier: CConstants.CONTROLLER.WEEK) as? WeekController else { return nil }
page.currentDate = data
page.delegate = self
return page
}
// MARK: - Lifecycle -
override func viewDidLoad() {
super.viewDidLoad()
automaticallyAdjustsScrollViewInsets = true
dataSource = self
delegate = self
presentedController = getPage(data: currentDate)
presentedController?.afisare(data: currentDate)
setViewControllers([presentedController!], direction: .forward, animated: true, completion: nil)
}
}
extension WeekPageController: PageViewControllerDelegate {
func ziSaptamana(_ ziSaptamana : Int)
{
var weekDay = Calendar.current.component(.weekday, from: currentDate)
if weekDay == 1 { weekDay = 7 } else { weekDay -= 1}
if weekDay != 7 {
currentDate = Calendar.current.date(byAdding: .day, value: (ziSaptamana - weekDay), to: currentDate)!
} else {
currentDate = Calendar.current.date(byAdding: .day, value: ziSaptamana - 7, to: currentDate)!
}
self.presentedController?.afisare(data: currentDate)
}
extension WeekPageController: UIPageViewControllerDataSource {
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
let day = (viewController as! WeekController).currentDate
guard var dayBefore = Calendar.current.date(byAdding: .day, value: -7, to: day) else { return nil }
return getPage(data: dayBefore)
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
let day = (viewController as! WeekController).currentDate
guard var dayAfter = Calendar.current.date(byAdding: .day, value: +7, to: day) else { return nil }
return getPage(data: dayAfter)
}
}
extension WeekPageController: UIPageViewControllerDelegate {
func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
self.presentedController = pendingViewControllers.first as! WeekController
self.presentedController.afisare(data: presentedController.currentDate)
}
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
self.currentDate = (self.viewControllers?.first as! WeekController).currentDate
}
protocol PageViewControllerDelegate : class {
func ziSaptamana(_: Int)
}
class WeekController: UIViewController {
var index: Int = 0
var currentDate = Date()
weak var delegate: PageViewControllerDelegate?
private func delegates(id: Int){
delegate?.ziSaptamana(id)
}
@IBAction func luni(_ sender: UIButton) {
delegates(id: 1)
}
}
func afisare(data: Date) {
}
}