为啥我的页面控制器不能无限向后滚动?
Posted
技术标签:
【中文标题】为啥我的页面控制器不能无限向后滚动?【英文标题】:Why can't my page controller scroll infinitely backwards?为什么我的页面控制器不能无限向后滚动? 【发布时间】:2015-04-23 21:20:08 【问题描述】:我创建了一个页面控制器,它具有三个可以无限向前滚动的视图控制器(例如:1 -> 2 -> 3 -> 1 -> 等)但是当我在第一个视图控制器上并尝试向后滚动时它进入白屏并且不能正确向后滚动?
我可以向后滚动,直到到达第一个视图控制器,但之后它只是白屏 (例如:3 -> 2 -> 1 -> 白屏)
我希望能够无限向后滚动,所以它看起来像这样 (例如:3 -> 2 -> 1 -> 3 -> 等等)
这是我的页面视图控制器的代码,我不知道我做错了什么?
有人可以帮我让我的页面视图控制器无限向后滚动吗?谢谢!
#import "PageViewController.h"
@interface PageViewController ()
@end
@implementation PageViewController
NSArray *myViewControllers;
- (void)viewDidLoad
[super viewDidLoad];
self.delegate = self;
self.dataSource = self;
UIViewController *p1 = [self.storyboard
instantiateViewControllerWithIdentifier:@"ContentViewController1"];
UIViewController *p2 = [self.storyboard
instantiateViewControllerWithIdentifier:@"ContentViewController2"];
UIViewController *p3 = [self.storyboard
instantiateViewControllerWithIdentifier:@"ContentViewController3"];
myViewControllers = @[p1,p2,p3];
[self setViewControllers:@[p1]
direction:UIPageViewControllerNavigationDirectionForward
animated:NO completion:nil];
NSLog(@"loaded!");
-(UIViewController *)viewControllerAtIndex:(NSUInteger)index
return myViewControllers[index];
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerBeforeViewController:(UIViewController *)viewController
NSUInteger currentIndex = [myViewControllers indexOfObject:viewController];
--currentIndex;
currentIndex = currentIndex % (myViewControllers.count);
return [myViewControllers objectAtIndex:currentIndex];
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerAfterViewController:(UIViewController *)viewController
NSUInteger currentIndex = [myViewControllers indexOfObject:viewController];
++currentIndex;
currentIndex = currentIndex % (myViewControllers.count);
return [myViewControllers objectAtIndex:currentIndex];
-(NSInteger)presentationCountForPageViewController:
(UIPageViewController *)pageViewController
return myViewControllers.count;
-(NSInteger)presentationIndexForPageViewController:
(UIPageViewController *)pageViewController
return 0;
@end
【问题讨论】:
【参考方案1】:在您的 viewControllerBeforeViewController
函数中,模运算符 % 不能满足您的要求。你的数字是这样的,% 不会让你回到你的第三个视图:
2、1、0、-1。
后退时,您必须检查是否已包装,然后明确转到最后一个。
【讨论】:
您好,感谢您的帮助,但我找不到有关“包装”或“显式”进入视图控制器的任何信息。是否可以详细说明并提供参考供我查看或一些示例代码?非常感谢您的帮助。 “换行”是指当您打算从第 1 页转到第 3 页时。您检测到您在第 1 页,现在需要转到最后一页。与其让模公式来完成工作,就像你前进的情况一样,你必须明确地处理这种情况。【参考方案2】:感谢 Almo,我已经弄清楚并重写了 viewControllerBeforeViewController
的代码。
首先我设置 currentIndex,然后我检查显示的页面是第一个。
如果是那么我将当前页面设置为最后一页并返回它,
如果不是我运行我的旧方法来倒退,那么像往常一样返回它。
-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerBeforeViewController:(UIViewController *)viewController
NSUInteger currentIndex = [myViewControllers indexOfObject:viewController];
if (currentIndex == 0)
currentIndex = 2;
else
--currentIndex;
currentIndex = currentIndex % (myViewControllers.count);
return [myViewControllers objectAtIndex:currentIndex];
【讨论】:
看这个,你的代码是多余的。您不再需要 % 操作,因为if(currentIndex==0)
部分会处理它。就个人而言,我会做currentIndex--; if(currentIndex == -1) currentIndex = myViewControllers.count - 1;
以上是关于为啥我的页面控制器不能无限向后滚动?的主要内容,如果未能解决你的问题,请参考以下文章