1

Я занимаюсь этим некоторое время, но не могу найти то, что мне нужно. Я хотел бы узнать, как программным образом создать представление контейнера с контроллером детского представления. Я до сих пор довольно новичок в этом и изучаю основы, но из того, что я собираюсь, это делалось с использованием resuable views и прикреплением их к контроллерам дочерних представлений до того, как объект представления контейнера добавляется в библиотеку (правда?), Я ищу либо учебник, либо пример кода, который показывает, как сделать это с нуля, используя xib, но без каких-либо осложнений, например, добавить ячейки таблицы и т. Д. Просто программно и контейнер и ребенок. Имеет ли это смысл? Я уверен, что должно быть что-то на S.O. Спасибо, если вы можете помочь.Контроллер контейнера запрограммирован

ОБНОВЛЕНИЕ --------------------------------------------- -------------------------------------------------- ----------------------- Мне удалось создать контроллер детского представления, который появляется с действием UIButton. Соответствующий код:

- (IBAction)Pressed:(id)sender { 
    ChildViewController *childViewController = [[ChildViewController alloc]init]; 
    [self displayContentController:childViewController]; 
} 

- (void) displayContentController: (UIViewController*) content { 
    [self addChildViewController:content]; 
    content.view.frame = CGRectMake(0, 115, 320, 240); 
    content.view.backgroundColor = [UIColor redColor]; 

     CATransition *transition = [CATransition animation]; 
transition.duration = 1; 
transition.type = kCATransitionPush; 
transition.subtype = kCATransitionFromLeft; 
[transition setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
[content.view.layer addAnimation:transition forKey:nil]; 
[self.view addSubview:content.view]; 
[content didMoveToParentViewController:self]; 
} 

Так что это нормально. Я нажимаю кнопку и появляется красный квадрат, контроллер детского вида, занимающий небольшую часть экрана. То, что я хотел бы знать, - это наилучшая практика.

ответ

4

В основном это связано с наличием 1 Parent View Controller, который будет организовывать внешний вид своих дочерних контроллеров.

Чтобы быть честным, я нахожу Apple Docs вполне полным на этой части.

Цитата из того же документы:

Добавление ребенка Просмотр контроллер к содержимому

Чтобы включить контроллер представления ребенка в содержание программно создать отношения родитель-потомок между соответствующими контроллерами зрения сделав следующее:

  1. Вызвать метод addChildViewController: вашего контроллера контейнера. Этот метод сообщает UIKit, что ваш контроллер представления контейнера теперь управляет представлением контроллера дочернего представления.
  2. Добавить представление корня ребенка в иерархию представлений вашего контейнера. Не забудьте указать размер и положение рамки ребенка как часть этого процесса.
  3. Добавьте ограничения для управления размером и положением корневого представления ребенка.
  4. Вызвать метод didMoveToParentViewController: метод контроллера детского представления.

Codesample:

- (void) displayContentController: (UIViewController*) content { 
    [self addChildViewController:content]; 
    content.view.frame = [self frameForContentController]; 
    [self.view addSubview:self.currentClientView]; 
    [content didMoveToParentViewController:self]; 
} 

В ответ на обновление информации о лучших методах:

Objc.io имеет некоторые очень интересные статьи в этом отношении.

Например, в статье идет о View Controller Containment ноты:

View контроллеры должны быть многоразовые и самодостаточные сущности.

Контроллеры детского вида не являются исключением из этого правила. Для достижения этой цели контроллер родительского представления должен быть только , связанный с двумя задачами: выкладка корня контроллера детского представления просмотр и связь с контроллером дочернего представления через его открытый API . Он никогда не должен изменять дерево представления ребенка или другое внутреннее состояние .

Контроллеры детского видения должны содержать необходимую логику для управления своими деревьями просмотра самостоятельно - не относитесь к ним как к немым представлениям. Это приведет к более четкому разделению проблем и улучшению повторного использования.

Они также говорят о transitions между контроллерами представления при использовании этого рисунка.

+0

Да спасибо, я обнаружил, что и удалось сделать его работу. Однако я изо всех сил стараюсь сделать переход. Я должен был сделать это ясно в вопросе. Метод «текущий контроллер представления» не работает для контроллеров, которые не принимают полного представления, поэтому я прав, чтобы думать, что CATransition - правильный способ сделать это? Я уточню вопрос. – Paul

+0

@Paul См. Ссылки/цитаты. Я предпочитаю приводить некоторые хорошо сформированные статьи, а не давать то же объяснение :) Cheers – Daneo

0
- (void)addViewControllerToContainer:(UIViewController *)viewController { 

[self addChildViewController:viewController]; 

viewController.view.frame = self.container.bounds; //important!! 
[self.container addSubview:mapVC.view]; 

[viewController didMoveToParentViewController:self]; 

}

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

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