我試圖創建一個視圖,該視圖基於返回它顯示的對象的索引的另一個元素移動到某個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