2013-01-02 44 views
1

我一直在关注This线程来获取我的UIPageViewController的计数器。UIPageViewController中的Pagenumber

除了当我到达第一页或最后一页时,它就像一个魅力,然后pagenumber停留在页面之前。幸运的是,内容至少改变了。

下面是一些代码:

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

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

相关问题