2013-03-14 82 views
3

我正在嘗試使用PageviewController。我有4 ViewControllers,但他們都是不同的。在一個我有一個圖像,在第二個我有一個桌面,...PageviewController未按正確的順序顯示視圖控制器

我想滾動它與pageviewController。所以我做了以下事情。我已將它們添加到modelArray

ViewOneViewController *viewOne = (ViewOneViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"ViewOne"]; 
ViewTwoViewController *viewTwo = (ViewTwoViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"ViewTwo"]; 
ViewThreeViewController *viewThree = (ViewThreeViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"ViewThree"]; 
ViewFourViewController *viewFour =(ViewFourViewController *) [self.storyboard instantiateViewControllerWithIdentifier:@"ViewFour"]; 

self.modelArray = [[NSMutableArray alloc] initWithObjects:viewOne,viewTwo,viewThree,viewFour,nil]; 

接下來我設置了我的pageviewController像這樣。

ViewOneViewController *cVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewOne"]; 
    NSArray *viewControllers = [NSArray arrayWithObject:cVC]; 
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 

現在瀏覽pageviewViewController我有以下功能。

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
     viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    indexValue--; 
    if (indexValue < 0) { 
     return nil; 
    } 
    return [self.modelArray objectAtIndex:indexValue]; 
} 
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
     viewControllerAfterViewController:(UIViewController *)viewController 
{ 
    indexValue++; 
    if (indexValue > self.modelArray.count) { 
     NSLog(@"crash"); 
     return nil; 
    } 
    return [self.modelArray objectAtIndex:indexValue]; 
} 

我已經宣佈和合成indexValueint。但出於某種原因,它有時會向我展示兩次ViewOneController,或者它從ViewOneController到ViewThreeController等等。

有人可以幫助我嗎?

親切的問候

編輯

當我做到這一點。

[self.pageViewController setViewControllers:self.modelArray direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 

它崩潰,此錯誤

+0

我看到你設置你的頁面的視圖控制器只包含第一個視圖控制器。這是故意的嗎? – giorashc 2013-03-14 08:33:25

+0

如果我用多個viewController填充數組viewController,應用程序崩潰 – Steaphann 2013-03-14 08:38:51

+0

我從來沒有使用頁面控制器,但從文檔看來,你需要設置所有的視圖控制器,所以也許有一個問題,你如何設置它們? – giorashc 2013-03-14 08:41:20

回答

0

「(4)提供不匹配(1),用於所請求的轉變所需的數目視圖控制器的數量」你有一個你的代碼中幾乎沒有錯誤。

  1. 方法setViewControllers:設置當前控制器可見。設置self.modelArray不正確,因爲它包含您擁有的所有頁面。您需要在UIPageViewController初始化時使用它(並且如果您想強制更改當前頁面)。

  2. 您使用UIPageViewControllerDelegate不正確的方法。在indexValue類成員中沒有必要。在這種方法中,您應該找出下一個控制器(從viewController方法參數)或上一個控制器,並返回另一個控制器。

看這個代碼:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
     viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    if ([viewController isKindOfClass:[ViewOneViewController class]]) { 
     return nil; 
    } else if ([viewController isKindOfClass:[ViewTwoViewController class]]) { 
     return [self.modelArray objectAtIndex:0]; // return ViewOneViewController class instance 
    } else if 
    //... etc 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
     viewControllerAfterViewController:(UIViewController *)viewController 
{ 
    // vice versa 
} 
  • 當存儲所有在一個陣列中可能使用大量的存儲器控​​制器。我建議你不要保留在modelArray屬性中,而是在UIPageViewControllerDelegate協議方法中實例化它。
  • 祝你好運。

    相關問題