2014-01-30 83 views
2

我有一个视图控制器实现UIPageViewControllerDataSource委托,它包含一个UIPageViewController。UIPageViewController不会改变页面

我的问题是,在教程和阅读3小时后,我仍然不明白为什么UIPageController会通过移动内容来作出反应,但如果滚动足够,它不会更改页面。它总是停留在第一页上。

所以这是我的.h文件

#import <UIKit/UIKit.h> 
@interface BreathePageViewController : UIViewController <UIPageViewControllerDataSource> 
@property (strong, nonatomic) UIPageViewController *pageController; 
@end 

这是我的.m文件

#import "BreathePageViewController.h" 
#import "FirstViewController.h" 
#import "SecondViewController.h.h" 



@interface BreathePageViewController() { 
    NSArray *pageViewControllerScreens; 
    FirstViewController *firstViewController; 
    SecondViewController *secondViewController; 
    int pageIndex; 
} 

@end 

@implementation BreathePageViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    pageIndex = 0; 
    self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; 

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

    [self.pageController setViewControllers:@[firstViewController] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil]; 
    [self.view addSubview:self.pageController.view]; 
    [self addChildViewController:self.pageController]; 
    [[self view] addSubview:[self.pageController view]]; 
    [self.pageController didMoveToParentViewController:self]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { 
    if (pageIndex == 0) { 
     return nil; 
    } 
    pageIndex--; 
    return [self viewControllerAtIndex:pageIndex]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { 
    if (pageIndex == 2) { 
     return nil; 
    } 
    pageIndex++;   
    return [self viewControllerAtIndex:pageIndex]; 
} 

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

    UIViewController *vc; 

    if (pageIndex == 0) { 
     vc = [[FirstViewController alloc] init]; 
    } 
    else if (pageIndex == 1) { 
     vc = [[SecondViewController alloc] init]; 
    } 

    return vc; 

} 

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController { 
    return 2; 
} 

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


@end 

现在奇怪的东西是,pageViewController:viewControllerAfterViewController永远不会被调用。 有人可以帮我吗? 谢谢

回答

6

经过一个晚上的睡眠,我要回答我自己的问题。

我不知道为什么(任何评论赞赏),但问题不是视图控制器上,但它是在一个我一直在创造它。

在父视图控制器我是建设这样的UIPageViewController:

BreathePageViewController *pageController = [[BreathePageViewController alloc] init]; 
[pageController.view setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
[self.view addSubview:pageController.view]; 

现在我试图将pageViewController的声明作为iVar移动。它的工作原理。 希望可以帮助别人

+3

如果你使用的是ARC pageController,那么在将它的视图添加到self.view层次结构后,局部var会被释放。在dealloc过程中,委托设置为零。 – Marcio