UIPageViewController无法正常工作(页面指示符有时与当前页面不同步)

时间:2015-06-09 12:02:00

标签: ios objective-c uipageviewcontroller

在我的应用程序中,我有一个UIPageViewController.Sometime以下两个函数没有正确调用。

 pageViewController:ViewControllerBeforeViewController
 pageViewController:ViewControllerAfterViewController

我有一个页面指示符,它是从这两个函数触发的。有时候,它与当前页面不同步。 这是我在我的应用程序中使用的代码。

-(void)setPageView
{
    self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
    self.pageViewController.dataSource = self;
    NSArray *viewControllers ;
    currentTab = 0;

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)


      {

            ContentCardListViewController *startingViewController = (ContentCardListViewController*)[self viewControllerAtIndex:0];
           viewControllers = @[startingViewController];

        }
        else
        {
        IpadContentCardCollectionViewController *startingViewController = (IpadContentCardCollectionViewController*)[self viewControllerAtIndex:0];
            viewControllers = @[startingViewController];

        }
        [self setTabTextColor:0];

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

        // Change the size of page view controller
        //self.pageViewController.view.frame = _pagerView.frame;
        self.pageViewController.view.frame = CGRectMake(0, 0, _pagerView.frame.size.width, _pagerView.frame.size.height);
        [self addChildViewController:_pageViewController];
        [self.pagerView addSubview:_pageViewController.view];

        [self.pageViewController didMoveToParentViewController:self];
    }

 #pragma mark - PageViewController
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSUInteger index;
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {

    index = ((ContentCardListViewController*) viewController).pageIndex;
    }
    else
    {
        index=((IpadContentCardCollectionViewController*) viewController).pageIndex;

    }
    [self setTabTextColor:(int)index];

    if (index == 0) {
        return nil;
    }
    currentTab = (int)index;
//    if (index<4) {
//        [_horizontalTabScrollView setContentOffset:CGPointMake(self.horizontalTabScrollView.contentOffset.x-50,self.horizontalTabScrollView.contentOffset.y) animated:YES];
//        
//    }
    index--;
    NSLog(@"Befor nw=%d",(int)index);
    return [self viewControllerAtIndex:index];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger index;
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {

   index = ((ContentCardListViewController*) viewController).pageIndex;
    }
    else
    {
    index = ((IpadContentCardCollectionViewController*) viewController).pageIndex;

    }
    currentTab = (int)index;
    [self setTabTextColor:(int)index];

    if (index == NSNotFound) {
        return nil;
    }

    index++;
    if (index ==6) {
        return nil;
    }
//    if (index>3) {
//        [_horizontalTabScrollView setContentOffset:CGPointMake(self.horizontalTabScrollView.contentOffset.x+50,self.horizontalTabScrollView.contentOffset.y) animated:YES];
//
//    }

    NSLog(@"After nw=%d",(int)index);
    return [self viewControllerAtIndex:index];
}
- (UIViewController *)viewControllerAtIndex:(NSUInteger)index
{
//    if (index >6) {
//        return nil;
//    }
    ContentCardListViewController *contentCardListViewController ;
    IpadContentCardCollectionViewController *contentCardIpad ;

    // Create a new view controller and pass suitable data.
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {

    contentCardListViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ContentCardViewController"];

    contentCardListViewController.pageIndex = index;
        return contentCardListViewController;

    }
    contentCardIpad = [self.storyboard instantiateViewControllerWithIdentifier:@"ContentCardViewControllerIpad"];

    contentCardIpad.pageIndex = index;
    return contentCardIpad;
}

任何人都可以查看索引值吗?如果我错了或不知道。谢谢。

0 个答案:

没有答案