我试图创建一个视图,该视图基于返回它显示的对象的索引的另一个元素移动到某个ViewController
。如何让PageViewController显示不同的ViewController
我能够显示特定的ViewController一次,但是当我返回时,无论屏幕上显示哪个索引,我都会得到相同的ViewController
。
这里是我的代码:
在ViewDidLoad
我设置了PageViewController
并添加iCarousel作为一个子视图到它。
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationVertical options:nil];
self.pageViewController.dataSource = self;
[[self.pageViewController view] setFrame:[[self view] bounds]];
_controller1 = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
_controller2 = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
_controller3 = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
self.viewControllers = [NSArray arrayWithObjects:_controller1, nil];
[self.pageViewController setViewControllers:self.viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];
[self.view addSubview:_carousel];
这里是控制其ViewController
应在屏幕上显示时,用户拉动的观点了代码。
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
if (self.pageViewController.viewControllers[0] == self.controller2)
return self.controller1;
return nil;
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
if (self.pageViewController.viewControllers[0] == self.controller1) {
if ([self.carousel currentItemIndex] == 2) {
NSLog(@"Giving view %d", [self.carousel currentItemIndex]);
return self.controller2;
} else if ([self.carousel currentItemIndex] == 3) {
NSLog(@"Giving view %d", [self.carousel currentItemIndex]);
return self.controller3;
}
}
return nil;
}
我一定要摧毁拉ViewController
不知何故,或者是这甚至可能与UIPageViewController
?
谢谢。
编辑: 试图以实例化ViewControllers时候我会转变对他们说:我看到的日志消息就像是工作的权利,但正确的View
仍然加载
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
if ([self.carousel currentItemIndex] == 2) {
NSLog(@"load first vc %d", [self.carousel currentItemIndex]);
FirstViewController *secondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];
return secondVC;
} else if ([self.carousel currentItemIndex] == 3) {
NSLog(@"load third vc 2 %d", [self.carousel currentItemIndex]);
SecondViewController *thirdVC = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
return thirdVC;
}
return nil;
}
用这种方法仅在第一次。也是第一次转换到SecondViewController
或ThirdViewController
我得到日志消息两次。
编辑︰只是注意到,与此我能够无限滚动下去,因为它不断加载ViewController
一次又一次。所以,如果我滚动iCarousel
索引2并拉起其View
我先得到先前的观点,但如果再次“拉”我得到正确的。
我觉得我很亲密,但是我错过了什么小东西?
最后编辑:
好显然我的代码是从一开始就正确。这里有someand some more关于UIPageViewControllerTransitionStyleScroll
中的一个错误的讨论。所以简单地改变过渡到curl做了我想要做的。
如果有人能回答如何以及在哪里我会实施这个很好的the suggested answer。
我有点迷路。我将如何使用它?在UIPageViewControllerDataSource方法里面或者在哪里使用这个方法? – Pahnev 2014-11-24 15:25:23
您可以在任何需要它的地方使用setViewControllers。 – Rollo 2014-11-25 03:40:04