пользовательский контроллер представления контейнера + раскадровка?

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

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

Вид обычного контроллера разделенного представления, но я хочу его расширить: ширина представления "a" должна изменяться, когда я нажимаю представление "B" - представление "C" переходит в видимую область

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

Например, в моей раскадровке у меня есть 3 представления контейнера: AViewController (для представления), BViewController, CViewController и один комбинированный контроллер представления (начальный контроллер представления). В комбинированном контроллере представления я буду внедрять переходы из представления контейнера и инициализировать отношения между представлениями контейнера с помощью следующего кода:

@property ... *aViewController,*bViewController,*cViewController;
    - (void)prepareForSegue:(UIStoryboardSegue *)segue
    sender:(id)sender
    {
    if ([segue.identifier isEqualToString:@"EmbedAViewController"])
    {
    self.aViewController =
    segue.destinationViewController;
    }
    if ([segue.identifier isEqualToString:@"EmbedBViewController"])
    {
    self.bViewController=segue.destinationViewController
    }

   -(void)viewDidLoad
   {
     [super viewDidLoad];
     self.aViewController.bViewController=self.bViewController;
   }

Вопрос 1. Правильно ли реализовать мое задание с помощью раскадровки? Вопрос 2. Какие ограничения есть у контейнерного представления? Это визуальная замена API addChildViewController? Если нет, то где я должен реализовать детско-родительские отношения? Я должен использовать в своем комбинированном контроллере представления в методе prepareForSegue

 [self addChildViewController:aViewController]; 
    [self.view addSubview:aViewController.view];

Вопрос 3: как поместить представление контейнера за пределы видимой области в начале?

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

Изменить:
Я хочу установить отношения между ними всеми. Содержимое представления «B» зависит от «A», а содержимое представления «C» зависит от «B».


person Neil Galiaskarov    schedule 16.02.2013    source источник


Ответы (1)


Я думаю, что у вас есть некоторые заблуждения. Если вы хотите реализовать контроллеры представления контейнера в раскадровке, вам не нужно ничего делать в коде. Начните с одного контроллера, который вы называете контроллером комбинированного представления, и перетащите 3 представления контейнера. Первоначально вы можете захотеть изменить их размер так, чтобы все они были в полный рост, и расположить их рядом друг с другом на главном виде. Затем вы можете изменить их размеры и положение с помощью инспектора размеров, чтобы представление C начиналось с правого края представления контроллеров комбайна, таким образом, оно изначально будет за пределами экрана. Вы автоматически получите три контроллера представлений, подключенных к соответствующим представлениям контейнеров с переходом встраивания. Все три из этих контроллеров будут созданы одновременно с комбинированным контроллером. Вам понадобятся выходы в комбинированном контроллере для каждого из его представлений контейнера, чтобы вы могли изменять их размер по мере необходимости в коде.

person rdelmar    schedule 16.02.2013
comment
Спасибо за Ваш ответ! Я хочу установить отношения между «А» и «Б». Содержание представления «B» зависит от того, что выбрано в представлении «A». - person Neil Galiaskarov; 16.02.2013
comment
На самом деле, это работает. Я использовал, когда «A» - это контроллер представления таблицы, а «B» - простой контроллер представления пользовательского интерфейса. И я передал данные между ними без проблем. Я хотел знать, будет ли у меня много ловушек, если я буду продолжать в том же духе? - person Neil Galiaskarov; 16.02.2013
comment
@НаильГалиаскаровб, это зависит от того, как вы ссылаетесь на один контроллер из другого. A, B и C будут дочерними контроллерами представления комбинированного контроллера представления, поэтому вы можете получить ссылку на них из свойства childViewControllers. - person rdelmar; 16.02.2013
comment
это был один из вопросов. если я поставлю представление контейнера «A», это означает, что это дочерний контроллер комбинированного просмотра, и это визуальная замена отношений родитель-потомок? - person Neil Galiaskarov; 17.02.2013
comment
@НаильГалиаскаров, я не понимаю, что вы имеете в виду под визуальной заменой отношений родитель-ребенок. - person rdelmar; 17.02.2013
comment
Хорошо, попробую перефразировать. если я помещу контейнерные представления в свой комбинированный контроллер представления, то если я захочу получить доступ к [combinedVC childViewControllers][0], в то время как консоль отладки говорит, что этот массив пуст. Почему? - person Neil Galiaskarov; 18.02.2013
comment
@НаильГалиаскаров, я не знаю, это не должно быть пустым. Должно быть что-то не так с тем, как вы их настроили или где вы пытаетесь получить к ним доступ. Где у тебя был этот журнал? - person rdelmar; 18.02.2013