这是一个老问题,我的答案甚至可能不直接针对欺骗性汤姆的问题,但也许的信息将帮助别人。 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教程我在网上都显示出使用单一视图 - 控制的是被每个页面重复使用,这没”上找到不会帮助我,因为我为每个页面都有独立的视图控制器。