viewController.view.superview равен нулю

Я пытаюсь реализовать функцию прокрутки страницы в своем проекте. Я разрабатываю для iOS 5 с раскадровками (и ARC). Вот что я сделал в своей раскадровке:

введите здесь описание изображения

Первый viewController (слева) имеет scrollView и pageControl. Его класс называется GlobalDashboardViewController и наследуется от класса DashboardViewController (который наследуется от UIViewController). Два других контроллера — это простые UIViewController с идентификаторами (MainDashboard и SecondaryDashboard).

В GlobalDashboardViewController.m есть только viewDidLoad, который получает childViewControllers:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"MainDashboard"]];
    [self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"SecondaryDashboard"]];
}

DashboardViewController.m немного сложнее. Вот самые важные методы:

- (void)viewDidLoad
{
    // Calling the viewDidLoad above to populate the childViewControllers array
    [super viewDidLoad];

    [self.scrollView setPagingEnabled:YES];
    [self.scrollView setScrollEnabled:YES];
    [self.scrollView setShowsHorizontalScrollIndicator:NO];
    [self.scrollView setShowsVerticalScrollIndicator:NO];
    [self.scrollView setDelegate:self];
}


-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.pageControl.currentPage = 0;
    _page = 0;
    [self.pageControl setNumberOfPages:[self.childViewControllers count]];

    UIViewController *viewController = [self.childViewControllers objectAtIndex:self.pageControl.currentPage];
    if (viewController.view.superview != nil) {
        [viewController viewWillAppear:animated];
    }

    self.scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * [self.childViewControllers count], scrollView.frame.size.height);
}

Есть много других методов, но я не думаю, что они актуальны, потому что вот моя проблема: приложение запускается, и я вижу scrollView и pageControl. Фон темно-серый, так как я установил его в GlobalDashboard viewController. Я могу правильно прокручивать, и pageControl обновляется. Но я не вижу других взглядов. Когда я помещаю точку останова в if в viewWillAppear и смотрю на viewController, она называется правильно (Dashboard Page 1, это имя, которое я дал контроллеру в раскадровке), но его свойство _view показывает 0x00000000, как вы можете видеть здесь:

введите здесь описание изображения

Итак, я никогда не попадаю внутрь if, где происходит некоторая магия фактического отображения viewControllers...

Моя работа основана на примере проекта, который вы можете найти здесь: PageViewController. Когда я запускаю его, он работает отлично. Я понятия не имею, почему я не могу заставить его работать в моем собственном проекте.

Любые идеи ?

Спасибо


person rdurand    schedule 25.09.2012    source источник


Ответы (1)


Вы никогда не добавляете само представление ([self.view addSubview:/*Your child controller's view*/]). Проект, на который вы ссылаетесь, делает это в - (void)loadScrollViewWithPage:(int)page внутри PagerViewController.m.

person borrrden    schedule 25.09.2012
comment
Спасибо за Ваш ответ. Что ж, я тоже так делаю, но моя ошибка заключалась в том, что я забыл на самом деле вызвать loadScrollViewWithPage: в viewWillAppear... Я был так сосредоточен на viewWillAppear что я даже не подумал об этом .. Большое спасибо за то, что указали мне правильное направление! - person rdurand; 25.09.2012