Objective c UIPageViewController反向滑动未显示最后一个ViewController。它再次加载
我在UIPageViewController上工作,对这个概念我是新手。我的要求是这样的, 我有四种布局称之为L1、L2、L3和L4。所有的布局设计都是在同一个视图控制器中完成的,称之为jlayutonevc我的功能就像杂志一样,所以在右/向前滑动时,我们会看到新文章,在左/向后滑动时,我会看到最后加载的文章Objective c UIPageViewController反向滑动未显示最后一个ViewController。它再次加载,objective-c,xcode,ios7,uiviewcontroller,uipageviewcontroller,Objective C,Xcode,Ios7,Uiviewcontroller,Uipageviewcontroller,我在UIPageViewController上工作,对这个概念我是新手。我的要求是这样的, 我有四种布局称之为L1、L2、L3和L4。所有的布局设计都是在同一个视图控制器中完成的,称之为jlayutonevc我的功能就像杂志一样,所以在右/向前滑动时,我们会看到新文章,在左/向后滑动时,我会看到最后加载的文章 在进行向右/向前滑动时,我调用API,API将为我提供数据,根据这些数据我决定显示哪个布局 向右/向前滑动工作正常,数据显示完美,但向左/向后滑动不会显示上次加载的屏幕 我的代码 //
- 在进行向右/向前滑动时,我调用API,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,而是显示新数据。
希望你们能帮助我。提前谢谢。请在下面对我的问题提出任何疑问。我不知道你为什么要检查
if ([self.cachedLayouts count] > 0) {
您的验证应基于页面计数:
-(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) {
if(pageCount
好的方法是添加到自定义视图控制器(JLayoutOneVC)属性,例如index,在这两种方法中,您都可以获得该值并增加/减少它(取决于方法)。之后,您可以根据该索引获取数据库并重新加载视图。嘿,Greg,我已经做了您建议的更改,但仍然不走运。作为参考,您可以试用此应用程序。我需要浏览与此应用程序类似的文章。我相信问题在于您的数据,以及setArticleDetailsRespDict:method的工作方式。您可以每次登录数据吗更改页面并查看它是否返回正确的值。如果您可以显示该方法,这将有所帮助。此外,您还可以设置dict:setArticleDetailsRepdict,然后设置nil:prev.ArticleDetailsRepdict并重新加载数据。因此,我相信您可以使用nil dictionary重新加载数据。