У моего приложения есть журнал, в котором находится UIPageViewController
. Контроллер представления для страницы работает отлично, но UIPageViewController
имеет некоторое неустойчивое поведение. Во-первых, методы делегата (Контроллер просмотра страницы является его собственный делегат):Создание UIPageViewController с бесконечным прокручиванием дней
private func journalPage(for date: Date) -> JournalViewController? {
// Create a new view controller and pass suitable data.
guard let journalPage = storyboard?.instantiateViewController(withIdentifier: JournalViewController.storyboardID) as? JournalViewController else {
return nil
}
journalPage.date = date
return journalPage
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let yesterday = calendar.date(byAdding: .day, value: -1, to: self.date) else {
return nil
}
self.date = calendar.startOfDay(for: yesterday)
return journalPage(for: self.date)
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let tomorrow = calendar.date(byAdding: .day, value: 1, to: self.date) else {
return nil
}
self.date = calendar.startOfDay(for: tomorrow)
return journalPage(for: self.date)
}
Я обновляю date
в UIPageViewController
, а затем возвращает сконфигурированный страницу журнала. Проблема в том, что часто дублируются страницы (страницы за ту же дату) или пропущена страница/дата. Я нашел this вопрос, но не вижу, как я могу реализовать что-то подобное.
Я работал с UIPageViewController
раньше и всегда использовал индекс, чтобы обойти это, но в этом случае индекс не имеет смысла, поскольку вы можете прокручивать начало/конец времени (буквально).
Как я могу гарантировать, что новая страница будет сделана в правильное время, чтобы избежать дублирования/пропущенных дат?
Мне нравится эта идея, но это ломается при использовании других систем календаря, не так ли? – jjatie
iOS позволяет легко конвертировать между календарями, поэтому вы можете использовать дату Juilan для своего индекса, а затем сопоставить эту дату в календаре пользователя для отображения. –