UIPageViewController后退不会显示最后一个ViewController。它再次重新加载

时间:2014-08-01 10:19:09

标签: objective-c xcode ios7 uiviewcontroller uipageviewcontroller

我正在研究UIPageViewController,我是这个概念的新手。我的要求是这样的,

我有四种布局称为L1,L2,L3和L4。所有的布局设计都在同一个视图控制器中调用 JLayoutOneVc 我的功能就像杂志所以在右/向前滑动我们看到新文章,在左/后滑动我看到最后加载的文章。

  • 在做正确/向前滑动的同时,我调用了API,它将根据我决定显示哪个布局来提供数据
  • 向右/向右滑动可正常工作并显示数据完美,但向左/向后滑动不会显示上次装入的屏幕。

我的代码

// load previous Article
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    if ([self.cachedLayouts count] > 0) {
        JLayoutOneVC *prev = (JLayoutOneVC *)[self.cachedLayouts lastObject];
        //[prev setArticleDetailsRespDict:self.articleDetailsRespDict];
        pageCount -= 1;
        return prev;
    }

    JLayoutOneVC *prev = [self.storyboard instantiateViewControllerWithIdentifier:@"LayoutOneId"];
    [prev setArticleDetailsRespDict:self.articleDetailsRespDict];
    prev.articleDetailsRespDict = nil;
    [prev.articleDetailsTable reloadData];
    pageCount -= 1;
    return prev;
}

// load next Article
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    JLayoutOneVC *next = (JLayoutOneVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"LayoutOneId"];
    [next setArticleDetailsRespDict:self.articleDetailsRespDict];
    next.articleDetailsRespDict = nil;
    [next.articleDetailsTable reloadData];
    pageCount += 1;
    return next;
}

- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers
{
    if([pendingViewControllers count]>0)
    {
        // Doing this for testing purpose
        if (self.layout > 4) {
            self.layout = 1;
        } else {
            self.layout += 1;
        }
        [self performSelector:@selector(getArticleDetailsFromServer:) withObject:nil afterDelay:1.0f];
    }

}

作为参考,我正在添加图片。

  • 将此视为我的第一篇文章。

enter image description here

  • 在右/前滑动中,我看到了

enter image description here

  • 这是第二篇文章。

enter image description here

  • 现在,当我向后/向左滑动时,这是我所面临的问题。它不是加载最后一个ViewController,而是显示新数据。

enter image description here

enter image description here

希望你们能帮助我。提前致谢。请在下面的问题评论中留下任何疑问。

1 个答案:

答案 0 :(得分:0)

我不知道你为什么要做检查

if ([self.cachedLayouts count] > 0) {

您的验证应基于pageCount:

-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    if (pageCount > 0) {
        pageCount -= 1;
        JLayoutOneVC *prev = [self.storyboard instantiateViewControllerWithIdentifier:@"LayoutOneId"];
        // I'm not sure how setArticleDetailsRespDict get the data, the best way would be get the data base on index, in this example pageCount
        [prev setArticleDetailsRespDict:self.articleDetailsRespDict];
        prev.articleDetailsRespDict = nil;
        [prev.articleDetailsTable reloadData];

        return prev;
    }
}

另一种方法viewControllerAfterViewController:也应检查pageCount值:

if (pageCount < MAXPAGECOUNT) {

好的方法是添加到自定义视图控制器(JLayoutOneVC)属性,例如索引,在这两种方法中,您都可以获取此值并增加/减少它(取决于方法)。之后,您可以获取该索引的数据库并重新加载视图。