2016-11-01 3 views
0

В моем случае я использую ViewController как родительский элемент PageViewController. И это также источник данных PageViewController, предоставляя ContentViewController.Почему ContentVC viewWill/DidAppear вызывается перед его родителем (PageVC)?

Это странно, что 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; 
} 

Спасибо.

+0

С, где функция '' contentViewControllerWithIndex дозвонились, есть ваш ответ .. – iphonic

ответ

0

Если пройти через одну строку вашего кода

  • Эта линия просто Alloc ваш PageViewController. На самом деле он не добавил его поверх вашего ViewController. Таким образом, ViewWillAppear для PageViewController здесь не будет вызван.

Код:

PageViewController *pageVC = [[PageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; 
  • Ниже строки вызова [self contentViewControllerWithIndex:0] который будет расПредеЛение ContentViewController также добавить его на PageVC так ViewWillAppear для ContentViewController называется

Код:

[pageVC setViewControllers:@[[self contentViewControllerWithIndex:0]] 
         direction:UIPageViewControllerNavigationDirectionForward 
         animated:NO completion:nil]; 
  • Внизу строка добавляет PageVC как childViewController от ViewController. Таким образом, как только будет вызываться ViewWillAppear из ViewController, тогда только он может позвонить ViewWillAppear из PageVC и добавить его в качестве своего детского просмотра.

Код:

[self addChildViewController:pageVC]; 
[self.view addSubview:pageVC.view]; 
[pageVC didMoveToParentViewController:self]; 
+0

Как вы сказали, "добавив, что on'PageVC' так' ViewWillAppear' для ContentViewController называется" , Но почему 'viewWillAppear'' PageVC' еще не вызывается при добавлении pageVC.view в self.view? Имеют ли они (дочерняя родительская пара для ContentVC-PageVC, PageVC-VC) одинаковое поведение? –

+0

Контроллер просмотра страницы не имеет собственного интерфейса; однако он добавляет эффект завивки страницы для своих детей, пока пользователь поворачивает страницу. Пользовательский контент предоставляется контроллерами представлений, которые являются дочерними элементами контроллера просмотра страницы. Для получения дополнительной информации https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/PageViewControllers.html –

 Смежные вопросы

  • Нет связанных вопросов^_^