2015-09-24 140 views
0

我在iOS应用程序中做了一个教程。但是我的PageViewController中有一个错误。UIPageViewController加载错误页面

我的教程有5页。但是我做的第二个转变页面总是反复出现在前一页。

例如,出现page0,移动到page1,然后当我想出现page2时,再次出现page1。 这发生在双方。

这是我的代码:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

self.pageTexts = @[@"",intro1, intro2, intro3, intro4]; 

    self.index = 0; 
    self.viewControllerPageContentOne = [[ViewControllerPageContentOne alloc] init]; 
    self.viewControllerPageContentTwo = [[ViewControllerPageContentTwo alloc] init]; 
    self.viewControllerPageContentThree = [[ViewControllerPageContentThree alloc] init]; 


    self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"]; 
    self.pageViewController.dataSource = self; 


    UIViewController* first = [self viewControllerUsed]; 
    NSArray *viewControllers = [NSArray arrayWithObject:first]; 
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; 

    [self addChildViewController:self.pageViewController]; 
    [self.view addSubview:self.pageViewController.view]; 
    [self.pageViewController didMoveToParentViewController:self]; 


} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 

} 




- (UIViewController *)viewControllerUsed{ 

    if (self.index == 0) { 
     self.viewControllerPageContentOne=[self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerPageContentOne"]; 
     return self.viewControllerPageContentOne; 
    } 
    else if (self.index == 1) 
    { 
     self.viewControllerPageContentTwo=[self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerPageContentTwo"]; 
     self.viewControllerPageContentTwo.titleText = self.pageTexts[self.index]; 
     return self.viewControllerPageContentTwo; 
    } 
    else if (self.index == 2) 
    { 
     self.viewControllerPageContentTwo=[self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerPageContentTwo"]; 
     self.viewControllerPageContentTwo.titleText = self.pageTexts[self.index]; 
     return self.viewControllerPageContentTwo; 
    } 
    else if (self.index == 3) 
    { 
     self.viewControllerPageContentTwo=[self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerPageContentTwo"]; 
     self.viewControllerPageContentTwo.titleText = self.pageTexts[self.index]; 
     return self.viewControllerPageContentTwo; 
    } 
    else if (self.index == 4) 

    { 
     self.viewControllerPageContentThree=[self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerPageContentThree"]; 
     self.viewControllerPageContentThree.titleText = self.pageTexts[self.index]; 
     return self.viewControllerPageContentThree; 
    } 
    else{ 
     return nil; 
    } 
} 



#pragma mark - Page View Controller Data Source 



- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { 

    self.index--; 
    if (self.index < 0) { 
     self.index = [self.pageTexts count]-1; 
    } 
    return [self viewControllerUsed]; 


} 



- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { 

    self.index++; 
    if (self.index > [self.pageTexts count]-1) { 
     self.index = 0; 
    } 
    return [self viewControllerUsed]; 

} 





- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController 
{ 
    return [self.pageTexts count]; 
} 

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController 
{ 
    return 0; 
} 

我假设有在索引页面的错误,但我不知道它。 谢谢

+0

你有没有注意到在你的'viewControllerUsed'索引1,2和3中,你返回的视图控制器对象具有不同的标题。这是预期的吗? – Abhinav

+0

您的viewControllerUsed方法为索引1-3返回相同的视图控制器,这可能会解释您所看到的内容。尝试改变它以返回不同的视图控制器。 –

+0

是的,这个想法是,与指数1,2,3的屏幕是相同的看法,但具有不同的标题或文字 – user3086708

回答

0

我认为你的问题是,你正在为视图控制器创建类级属性。而那也是你初始化它们viewDidLoad

self.viewControllerPageContentOne = [[ViewControllerPageContentOne alloc] init]; 
self.viewControllerPageContentTwo = [[ViewControllerPageContentTwo alloc] init]; 
self.viewControllerPageContentThree = [[ViewControllerPageContentThree alloc] init]; 

我的建议是创建视图控制器,并将它们保存在一个这样的数组:从self.viewControllers

UIViewController *page0 = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerPageContentOne"]; 

UIViewController *page1 = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerPageContentTwo"] 
page3.titleText = self.pageTexts[1]; 

UIViewController *page2 = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerPageContentTwo"] 
page3.titleText = self.pageTexts[2]; 

UIViewController *page3 = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerPageContentTwo"] 
page3.titleText = self.pageTexts[3]; 

UIViewController *page4 = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerPageContentThree"]; 

[self.viewControllers addObject:page0]; 
[self.viewControllers addObject:page1]; 
[self.viewControllers addObject:page2]; 
[self.viewControllers addObject:page3]; 
[self.viewControllers addObject:page4]; 

,然后在viewControllerUsed简单地返回viewControllers self.viewControllers[self.index]