Ответ 1
Что касается presentationCountForPageViewController: и presentationIndexForPageViewController:, в документации указано:
Оба эти метода вызывается после вызова метода setViewControllers:direction:animated:completion:. После навигации с помощью жестов эти методы не вызываются. Индекс обновляется автоматически, и ожидается, что количество контроллеров просмотра останется неизменным.
Следовательно, похоже, что нам нужно вернуть действительное значение сразу после вызова setViewControllers:direction:animated:completion:.
Всякий раз, когда я реализую источник данных, я создаю вспомогательный метод showViewControllerAtIndex:animated:
и отслеживаю возвращаемое значение в свойстве presentationPageIndex
:
@property (nonatomic, assign) NSInteger presentationPageIndex;
@property (nonatomic, strong) NSArray *viewControllers; // customize this as needed
// ...
- (void)showViewControllerAtIndex:(NSUInteger)index animated:(BOOL)animated {
self.presentationPageIndex = index;
[self.pageViewController setViewControllers:@[self.viewControllers[index]] direction:UIPageViewControllerNavigationDirectionForward animated:animated completion:nil];
}
#pragma mark - UIPageViewControllerDataSource
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController {
return self.presentationPageIndex;
}
Затем вы можете использовать этот метод для отображения правильного контроллера представления и отображения выбранного индекса на правильном значении:
- (void)viewDidLoad {
[super viewDidLoad];
[self showViewControllerAtIndex:0 animated:NO];
}
- (IBAction)buttonTapped {
[self showViewControllerAtIndex:3 animated:YES];
}