2013-07-24 34 views
1

我有以下代碼來創建UIPageViewController:使用UIPageViewController具有多個視圖

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

self.index = 0; 

self.pageContainer = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; 

self.pageContainer.dataSource = self; 
[[self.pageContainer view] setFrame:[[self view] bounds]]; 

DMSignUp1ViewController *first = [[DMSignUp1ViewController alloc] init]; 
DMSignUp2ViewController *second = [[DMSignUp2ViewController alloc] init]; 

self.viewControllers = [[NSArray alloc] initWithObjects:first, second, nil]; 

[self.pageContainer setViewControllers:self.viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 

[self addChildViewController:self.pageContainer]; 
[[self view] addSubview:[self.pageContainer view]]; 
[self.pageContainer didMoveToParentViewController:self]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    if(self.index == 0) { 
     return nil; 
    } 

    self.index--; 
    return [self.viewControllers objectAtIndex:self.index]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
{ 
    if(self.index == 1) { 
     return nil; 
    } 

    self.index++; 
    return [self.viewControllers objectAtIndex:self.index]; 
} 

我有兩個UIViewControllers:DMSignUp1和2中創建,然後將viewControllers陣列英寸

當我去運行它,我得到以下錯誤:「提供了查看控制器的數量(2)不符合所要求的數量(1)所請求的轉變」

我的理解是因爲我傳遞的數組用作視圖控制器。那麼如何設置我想要使用數組中的第一個視圖控制器?

回答

4

在ViewController.m的末尾添加以下方法文件

- (DMSignUp1ViewController *)viewControllerAtIndex:(NSUInteger)index { 

    DMSignUp1ViewController *first= [[DMSignUp1ViewController alloc] initWithNibName:@"APPChildViewController" bundle:nil]; 
    first.index = index; 

    return childViewController; 
} 

而且,將以下代碼

DMSignUp1ViewController *first = [[DMSignUp1ViewController alloc] init]; 
DMSignUp2ViewController *second = [[DMSignUp2ViewController alloc] init]; 

self.viewControllers = [[NSArray alloc] initWithObjects:first, second, nil]; 

隨着

APPChildViewController *initialViewController = [self viewControllerAtIndex:0]; 

    NSArray *viewControllers = [NSArray arrayWithObject:initialViewController]; 

    [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 

希望這可以幫助你...

+0

我最終這樣做了,但仍選擇使用UINavigationController。雖然謝謝! – DJDMorrison

2

如果您在使用[self.pageContainer setViewControllers:時將UIPageViewController spineLocation設置爲除UIPageViewControllerSpineLocationMid之外的任何值,則只能將數組傳遞給一個視圖控制器。該API不是很清楚,它說Controllers。當UIPageViewController通過dataSource請求他們時,您提供額外的viewControllers

Link to the spine reference

+0

我正在使用scro而不是翻頁,我相信這意味着不能使用尖晶石。無論如何,我已經去過不同的技術,但謝謝! – DJDMorrison

相關問題