UIPageViewController 向后滑动未显示最后一个 ViewController。它再次重新加载
Posted
技术标签:
【中文标题】UIPageViewController 向后滑动未显示最后一个 ViewController。它再次重新加载【英文标题】:UIPageViewController back swipe is not showing last ViewController. It reloads again 【发布时间】:2014-08-01 10:19:08 【问题描述】:我正在研究 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];
我正在添加图片作为参考。
将此视为我的第一篇文章。 向右/向前滑动我看到了 这是第二篇文章。 现在,当我向后/向左滑动时,这就是我面临的问题。它不会加载最后一个 ViewController,而是显示新数据。希望你们能帮助我。提前致谢。请在下面我的问题评论中提出任何疑问。
【问题讨论】:
【参考方案1】:我不知道你为什么要检查
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) 属性,例如 index,在这两种方法中,您都可以获取该值并增加/减少它(取决于方法)。之后,您可以获取该索引上的数据库并重新加载视图。
【讨论】:
嘿,格雷格,我已经做出了您建议的更改,但仍然没有运气。作为参考,你可以试试这个应用程序。我需要刷类似这个应用的文章itunes.apple.com/in/app/the-times-of-india/id427589329?mt=8 我认为问题在于您的数据,即 setArticleDetailsRespDict: 方法的工作方式。您能否在每次更改页面时记录您的数据并查看它是否返回正确的值。如果你能展示这种方法,那将会有所帮助。您还设置了该 dict: setArticleDetailsRespDict ,然后设置 nil: prev.articleDetailsRespDict 并重新加载数据。所以我相信你用 nil 字典重新加载数据。以上是关于UIPageViewController 向后滑动未显示最后一个 ViewController。它再次重新加载的主要内容,如果未能解决你的问题,请参考以下文章
创建一个无限循环的 UIPageViewController
如何使用按钮在 UIPageViewController 中向前和向后导航?