UIPageViewController不显示其内容视图控制器

时间:2015-12-04 16:29:53

标签: ios objective-c uipageviewcontroller

我似乎无法让UIPageViewController工作。使用下面的代码,PageViewController调用其所有数据源方法,甚至显示相应的点,但不显示实际的内容视图(即使我在调试中检查了视图控制器是否正确实例化)。有没有人知道我做错了什么?

编辑:视图控制器不是nil,但它的所有属性都是。显然,实例化出了问题。

//content view controller containing a text label
#import "TutorialPhoneContentViewController.h"

@interface TutorialRootViewController ()

@end

@implementation TutorialRootViewController {
    NSInteger numberOfViewControllers;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    numberOfViewControllers = 3;

    [self setUpViewControllers];
}

- (void)setUpViewControllers {
    self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
    self.pageViewController.dataSource = self;


    TutorialPhoneContentViewController *ctrl = [self viewControllerAtIndex:0];
    [self.pageViewController setViewControllers:@[ctrl] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

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

- (TutorialPhoneContentViewController *)viewControllerAtIndex:(NSInteger)index {

    //this returns the correct view controller, checked via debug

    TutorialPhoneContentViewController *ctrl = [self.storyboard instantiateViewControllerWithIdentifier:@"tutorialContentViewController"];
    ctrl.index = index;
    ctrl.text = [NSString stringWithFormat:@"View Controller #%ld", index];

    return ctrl;
}

#pragma mark - Page View Controller

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    NSInteger index = [(TutorialPhoneContentViewController *)viewController index];

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

    index--;

    return [self viewControllerAtIndex:index];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    NSInteger index = [(TutorialPhoneContentViewController *)viewController index];

    if (index == numberOfViewControllers-1) {
        return nil;
    }

    index++;

    return [self viewControllerAtIndex:index];
}

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

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

0 个答案:

没有答案