2013-11-07 2 views
2

В моем приложении у меня есть сложный вид, который содержит:
corePlot график
Коллекции View (управляется Core Data)
и некоторые другие Представлений, (управляемый Core Data другой запрос)
Элементы в представлении коллекции могут быть скопированы на основной участок.
Я думаю, было бы лучше и проще иметь несколько контроллеров представления:
один контроллер для основного участка, один для коллекции и т. Д. Потому что, если у меня есть только один контроллер просмотра для управления всеми этими элементами, это будет огромный файл, содержащий много кода и не хорошо структурированный.
Могу ли я использовать Контейнер для решения этой проблемы? или лучше придерживаться огромного файла ViewController? Или есть другое решение? Если да, то это решение можно сделать в раскадровке?Различных View контроллеры для одного View объективных C

ответ

3

Container View Controller кажется идеальным для того, что вы хотите:

Все шаги перечислены в приведенной выше ссылке, но быть коротким:
- добавить контроллер представления ребенка в контейнер с [self addChildViewController:childVC]
- то установить вид контейнера [self.view addSubview:childVC.view]
- и затем сказать контроллер представления ребенка, что он установлен в контейнере с [childVC didMoveToParentViewController:self]

затем, если вы хотите, чтобы перейти на новый контроллер представления ребенка:
- Позвоните [self addChildViewController:newVC] и [source willMoveToParentViewController:nil], чтобы контейнер знал, что вы собираетесь переключить контроллер детского вида.
- то сделать переход с:

[self transitionFromViewController:oldVC toViewController:newVC 
          duration:/*you duration*/ 
          options:/*your options*/ 
         animations:/*your animations*/ 
         completion:/*your completion*/] 
  • и в конце вызова [oldVC removeFromParentViewController] и [newVC didMoveToParentViewController:self], чтобы контейнер знать, что переключатель делается.

Надеюсь, что это поможет.

+1

хорошего друга и полезно тоже –

+0

Это то, что я пытаюсь сделать сейчас ... но Я не могу получить контейнер для показа на моем основном представлении. У меня есть контейнер, который разделяет коллекцию View в моей раскадровке. Я добавил IBAction для контейнера к основному контроллеру. Я также установил представление контейнеров в свой конкретный контроллер вида Collection в раскадровке. Где я могу вызвать addChildViewController? Это можно вызвать только на ViewController, а не на контейнере, который является представлением. Итак, как вызвать addChildViewController на контейнере – kapukinz

+0

Можно ли это сделать, используя контейнер представления в раскадровке? Это одно и то же, чем то, что предложила «мама»? – kapukinz

1

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

Надеюсь, это поможет!

Шаги для достижения этого в доске объявлений: 1) В IB выберите контроллер вида.
2) Добавить Контейнерные виды от IB для просмотра иерархии контроллера вида.
3) Вы можете изменить дочерний элемент контейнера, просто удалив его и подключив требуемый контроллер вида.
4) Оба ребенка обоих видов контейнера представлены без кода в раскадровке.

Для инициализации контроллеров просмотреть и делегирование ч/б я настоятельно рекомендую вам пересмотреть коды образца в View Controller Programming guide

+0

Спасибо, мне нужно подключить контейнеры к контроллеру Main View? Я сделал это (у меня есть IBOutlet для моих контейнеров) ... но что мне делать потом ... мои взгляды не отображаются. – kapukinz

+0

Надеюсь, что это поможет сейчас. Пожалуйста, просмотрите это руководство один раз. Также, примите этот ответ, если он вам поможет – aMother

+0

Спасибо, что помогло – kapukinz

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