2014-11-21 45 views
0

我試圖創建一個視圖,該視圖基於返回它顯示的對象的索引的另一個元素移動到某個ViewController如何讓PageViewController顯示不同的ViewController

我能夠顯示特定的ViewController一次,但是當我返回時,無論屏幕上顯示哪個索引,我都會得到相同的ViewControllerapp design

這裏是我的代碼:

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; 
} 

用這種方法僅在第一次。也是第一次轉換到SecondViewControllerThirdViewController我得到日誌消息兩次。

編輯︰只是注意到,與此我能夠無限滾動下去,因爲它不斷加載ViewController一次又一次。所以,如果我滾動iCarousel索引2並拉起其View我先得到先前的觀點,但如果再次「拉」我得到正確的。

我覺得我很親密,但是我錯過了什麼小東西?

最後編輯:

好顯然我的代碼是從一開始就正確。這裏有someand some more關於UIPageViewControllerTransitionStyleScroll中的一個錯誤的討論。所以簡單地改變過渡到curl做了我想要做的。

如果有人能回答如何以及在哪裏我會實施這個很好的the suggested answer

回答

0

的方法一個使用到UIPageView更改爲特定的是:

- (void)setViewControllers:(NSArray *)viewControllers direction:(UIPageViewControllerNavigationDirection)direction animated:(BOOL)animated completion:(void (^)(BOOL finished))completion; 

要設置特殊的viewController,您應該創建一個封裝的方法和指標在得到一個的viewController的方法。要做到這一點,你應該把你的視圖控制器放在一個數組中,這樣你可以用這個方法引用它們。

-(void)setView:(NSUInteger)index {  
    // create a view controller 
    UIViewController *startingViewController = (UIViewController *)[self.arrayOfViewControllers objectAtIndex:index]; 
    // place it in an array 
    NSArray *viewControllers = @[startingViewController]; 
    // Above method 
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:nil]; 
} 
+0

我有點迷路。我將如何使用它?在UIPageViewControllerDataSource方法裏面或者在哪裏使用這個方法? – Pahnev 2014-11-24 15:25:23

+0

您可以在任何需要它的地方使用setViewControllers。 – Rollo 2014-11-25 03:40:04

相關問題