【发布时间】:2015-03-16 02:33:58
【问题描述】:
我需要一个动态的 UIPageViewController,页数取决于我的数组的项目数量。
对此我有两种看法。一个用于第一页,另一个用于其他页面。它总是超过 2 页(我的数组中有两个项目)。
我正在尝试使用固定值进行测试。但是分页是不对的。索引不正确。
第一个问题,presentationCountForPageViewController [_vc count] 返回 nil;
第二个问题,分页不对。我到了最后一页,第一个视图就消失了,所以如果我返回,就会转到第二个视图,总是...
请帮忙!
- (void)viewDidLoad {
[super viewDidLoad];
FirstViewController *agenda = (FirstViewController*)[self viewControllerAtIndex:0];
[_vc addObject:@"FirstViewController"];
[_vc addObject:@"SecondViewController"];
self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
self.pageViewController.dataSource = self;
NSArray *viewControllers = [NSArray arrayWithObject:agenda];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self addChildViewController:_pageViewController];
[self.view addSubview:_pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];
UIPageControl *pageControlAppearance = [UIPageControl appearanceWhenContainedIn:[UIPageViewController class], nil];
pageControlAppearance.pageIndicatorTintColor = [UIColor lightGrayColor];
pageControlAppearance.currentPageIndicatorTintColor = [UIColor darkGrayColor];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
NSUInteger index = [_vc indexOfObject:viewController];
if ((index == 0) || (index == NSNotFound)) {
return nil;
}
index--;
//notice here I call my instantiation method again essentially duplicating work I have already done!
return [self viewControllerAtIndex:index];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
NSUInteger index = [_vc indexOfObject:viewController];
if (index == NSNotFound) {
return nil;
}
index++;
return [self viewControllerAtIndex:index];
}
#pragma mark - Page View Controller Data Source
- (UIViewController *)viewControllerAtIndex:(NSUInteger)index
{
if (index == 0){
FirstViewController *firstController = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
return firstController;
}
else{
SecondViewController *secondController = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
return secondController;
}
}
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
return [_vc count];
}
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
return 0;
}
【问题讨论】:
-
在哪里实例化
_vc数组?我怀疑在这段代码中它是 nil。 -
查看didload。如果我更改 2/3,我会收到第二个错误。
-
我在 viewDidLoad 中看不到任何初始化 _vc 的内容,但无论如何,您正在向其中添加字符串对象(例如 @"FirstViewController"),但随后您正在使用 indexOfObject 获取索引UIViewController 对象(例如 indexOfObject:viewController),所以你可能在每种情况下都得到 NSNotFound。
-
@pbasdf 我初始化了 _vc 数组。有 4 页,在第 2 页我找不到索引 :(
-
您是否在 _vc 数组中添加了额外的对象以用于额外的页面?
标签: ios objective-c iphone uipageviewcontroller