我一直关注This线程来获取我的UIPageViewController的计数器。
它的功能就像一个魅力,除了当我到达第一页或最后一页时,页面编号停留在页面之前。幸运的是,内容至少发生了变化。
以下是一些代码:
if(pageController.viewControllers.count != 0){
ViewPostController *vpc = [pageController.viewControllers objectAtIndex:0];
NSUInteger retreivedIndex = [self indexOfViewController:vpc];
self.title = [NSString stringWithFormat:@"%d of %d", retreivedIndex+1, [pageImageContent count]];
}
和
- (NSUInteger)indexOfViewController:(ViewPostController *)viewController
{
NSLog(@"indexex %d", [pageNumberArray indexOfObject:viewController.pageNumber]);
return [pageNumberArray indexOfObject:viewController.pageNumber];
}
有谁知道为什么计数器不会“达到”外部数字?
提前致谢
答案 0 :(得分:0)
这是一个老问题,我的答案可能甚至没有直接解决欺骗汤姆的问题,但也许这些信息可以帮助某人。 UIPageViewController困扰了我好几天。我的错误是假设这些方法仅在翻页时被调用:
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
实际上,他们似乎在翻页过程中被多次调用。我在主视图控制器中有一个currentPage
变量,无论何时调用这两个方法,我都会递增/递减,但它创建了类似于Tom描述的奇怪行为。我仍然使用那些方法(你必须),但在不同的方法中进行增量/减量。以下是这些方法的样子:
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
if (self.currentPage==0) {
return nil;
}
else {
return [[self pageArray] objectAtIndex:self.currentPage-1];
}
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
if (self.currentPage==self.pageArray.count-1)
{
return nil;
}
else
{
return [[self pageArray] objectAtIndex:self.currentPage+1];
}
}
currentPage
的递增/递减发生在此方法中:
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
if (completed)
{
int currentIndex = ((UIViewController *)[self.pageViewController.viewControllers objectAtIndex:0]).view.tag;
self.currentPage = currentIndex;
}
}
要使用此方法,您必须添加两个协议
<UIPageViewControllerDataSource, UIPageViewControllerDelegate>
不仅仅是数据源,还将委托设置为自我
self.pageViewController.delegate=self;
或不会调用该方法。我正在使用视图标签来确定每个页面的索引,但还有其他方法可以获取此数字。有关获取当前页面索引的方法的讨论,请参阅此文章:
UIPageViewController: return the current visible view
我在网上找到的UIPageViewController教程都显示了使用单个viewcontroller可以重用每个页面,这对我没有帮助,因为我为每个页面都有一个单独的viewcontroller。