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