2014-11-21 49 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

相关问题