为什么在其父(PageVC)之前调用ContentVC的viewWill / DidAppear?

时间:2016-11-01 16:47:03

标签: ios uipageviewcontroller lifecycle

在我的例子中,我使用ViewController作为PageViewController的父级。它也是PageViewController的dataSource,它提供了ContentViewController。

奇怪的是ContentViewController的-viewWill/DidAppear:在它的父级之前被调用,这是我从控制台得到的:

[ContentViewController viewWillAppear:]
[ContentViewController viewDidAppear:]
[ViewController viewWillAppear:]
[PageViewController viewWillAppear:]
[ViewController viewDidAppear:]
[PageViewController viewDidAppear:]

以下是ViewController.m中的一些代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    PageViewController *pageVC = [[PageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];;
    pageVC.dataSource = self;
    [pageVC setViewControllers:@[[self contentViewControllerWithIndex:0]]
                      direction:UIPageViewControllerNavigationDirectionForward
                       animated:NO completion:nil];
    pageVC.view.backgroundColor = [UIColor whiteColor];
    pageVC.view.frame = self.view.bounds;
    [self addChildViewController:pageVC];
    [self.view addSubview:pageVC.view];
    [pageVC didMoveToParentViewController:self];
}


-(ContentViewController  *)contentViewControllerWithIndex:(NSInteger )index {
    ContentViewController *vc = [[ContentViewController alloc] init];
    vc.index = index;
    return vc;
}

感谢。

1 个答案:

答案 0 :(得分:0)

如果您逐行浏览

  • 此行只会分配您的angular.module('myApp', ['ngCordova']) 。它实际上没有在PageViewController之上添加它。因此ViewController ViewWillAppear不会在此处调用。

代码:

PageViewController
  • 下面一行是调用PageViewController *pageVC = [[PageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; ,它将分配[self contentViewControllerWithIndex:0],并在ContentViewController上添加PageVCViewWillAppear称为ContentViewController

代码:

[pageVC setViewControllers:@[[self contentViewControllerWithIndex:0]]
                      direction:UIPageViewControllerNavigationDirectionForward
                       animated:NO completion:nil];
  • 下面一行是将PageVC添加为childViewController的{​​{1}}。因此,一旦ViewController ViewWillAppear被调用,那么只有它可以调用ViewController的{​​{1}}并将其添加为其childView。

代码:

ViewWillAppear