2016-11-01 2 views
0

In meinem Fall verwende ich ViewController als Eltern von PageViewController. Und es ist auch die DataSource von PageViewController durch Bereitstellung von ContentViewController.Warum ContentVCs viewWill/DidAppear vor seinem übergeordneten (PageVC) aufgerufen wird?

Es ist seltsam, dass ContentViewController die -viewWill/DidAppear: genannt wird, bevor es Eltern, hier ist das, was ich von der Konsole bekam:

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

Hier sind einige Code aus 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; 
} 

Dank.

+0

Von wo '' contentViewControllerWithIndex Funktion aufgerufen, es ist Ihre Antwort .. – iphonic

Antwort

0

Wenn Sie durch Zeile für Zeile des Codes gehen

  • Diese Linie nur Ihre PageViewController Alloc. Es hat es tatsächlich nicht oben auf Ihrem ViewController hinzugefügt. Also ViewWillAppear für PageViewController wird hier nicht aufgerufen.

Code:

PageViewController *pageVC = [[PageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; 
  • Unterhalb Linie [self contentViewControllerWithIndex:0] ruft, die die ContentViewController auch auf PageVC Zugabe Zuteilung wird so ViewWillAppear für ContentViewController genannt wird

Code:

[pageVC setViewControllers:@[[self contentViewControllerWithIndex:0]] 
         direction:UIPageViewControllerNavigationDirectionForward 
         animated:NO completion:nil]; 
  • Unterhalb Linie ist das Hinzufügen von PageVC als childViewController von ViewController. Also, wenn die ViewWillAppear von ViewController wird dann aufgerufen werden, nur kann es ViewWillAppear von PageVC nennen und fügen Sie es als seinen childView.

Code:

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

Wie gesagt, du "und fügte hinzu on'PageVC' es so' ViewWillAppear' für ContentViewController wird", . Aber warum 'viewWillAppear' von' PageVC' wird immer noch nicht aufgerufen, wenn pageVC.view zu self.view hinzugefügt wird? Haben sie (Kind-Eltern-Paar für ContentVC-PageVC, PageVC-VC) dasselbe Verhalten? –

+0

Der Seitenaufruf-Controller hat keine eigene Benutzeroberfläche. Allerdings fügt es seinen Kindern einen Seiten-Curl-Effekt hinzu, während der Benutzer die Seite dreht. Der benutzerdefinierte Inhalt wird von den Ansichtscontrollern bereitgestellt, die untergeordnete Elemente des Seitenaufruf-Controllers sind. Weitere Informationen finden Sie unter https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/PageViewControllers.html –

Verwandte Themen