Вы, кажется, путаете представления и их контроллеры: viewControllers не сложены, они просто являются частью файла nib или xib. Представления, с другой стороны, могут быть частью иерархии представлений и в этом смысле могут перекрывать друг друга. Функция viewController заключается в управлении и координации различных представлений на экране. Использование контроллера вида для управления одной кнопкой неэффективно: целью контроллера было бы облегчить связь между различными кнопками (например, отключение кнопок 1,2 и 4 при касании цифрой 3). Заявление @ bpapa о том, что использование более одного viewController не поощряется Apple, больше не является правильным. В настоящем разделе Контроллеры Windows, Views и View в Руководстве по программированию приложений iOs говорится:
Контроллер представления напрямую управляет одним представлением верхнего уровня и может управлять всеми или некоторыми подпредставлениями этого представления. Для простых пользовательских интерфейсов контроллер представления обычно управляет всеми представлениями в своей иерархии представлений. Однако для более сложных интерфейсов, состоящих из нескольких отдельных частей, контроллер представления может управлять подмножеством представлений и полагаться на один или несколько пользовательских объектов контроллера для управления другими группами представлений в иерархии представлений.
Одна вещь, которая не прояснена в документах, но которая укусила меня несколько раз за последние недели, это то, что создание viewController целью действия UIControl только имеет эффект, если этот viewController является файлом Владелец пера. Скажем, например, что у вас есть перо с двумя viewControllers, gameViewController и scoreViewController. GameView может содержать несколько кнопок, которые играют роль игровых фигур, и при касании их отправляет сообщение действия методу gameViewController - (void) pieceHasBeenTouched: (id) отправителя. Это прекрасно работает, если gameViewController является владельцем файла.
Теперь может показаться логичным, что если у вас есть кнопка в ScoreView, чтобы позволить ей отправить сообщение для ScoreViewController, скажем, saveScore или что-то в этом роде. По причинам, которые мне пока не совсем понятны, цепочка респондентов не позволит вам. Вам нужно сделать так, чтобы кнопка «Сохранить» в представлении счета отправляла сообщение о своем действии в gameViewController.
Я решаю эту проблему, устанавливая привязки IBOutlet между двумя контроллерами - уведомления являются еще одной возможностью.