Я пытаюсь обернуть голову вокруг контроллеров в Cocoa Touch. Основная проблема заключается в том, что я хотел бы иметь более одного контроллера «на экране» одновременно - я хочу иметь большое представление (с контроллером A), состоящее из меньших представлений, управляемых их собственными контроллерами (скажем, B). Мне бы хотелось, чтобы это было так, потому что разделение делает код намного чище. Плохо то, что дополнительные контроллеры (типа B) не являются «первоклассными гражданами» на экране, например, они не получают запросы на авторотацию и уведомления. (И они не могут легко отображать модальные контроллеры, они должны отправить сообщение presentModal…
на свой родительский контроллер.)
В чем отличие контроллеров A и B от точки зрения какао? Сохраняет ли система какой-либо указатель на «передний контроллер», привилегированный, на который она отправляет уведомления и тому подобное? Почему другие контроллеры не получают их, даже если их виды отображаются на экране? Считается ли хаком наличие нескольких контроллеров «на экране»? Или это поддерживается, и я просто упускаю какой-то пункт? Спасибо.
Подробнее о проблеме, которую я пытаюсь решить: я пишу простой браузер фотографий. Фотографии отображаются в полноэкранном режиме, пользователь может провести пальцем влево или вправо, чтобы изменить фотографии. Контроллер A заботится о прокручиваемой части, а контроллеры B сами заботятся о каждой фотографии.
Изоляция B казалась хорошей идеей, поскольку фотографии загружаются из сети, и многое может произойти, например, сеть может быть отключена и так далее. В контроллере B код довольно прост, поскольку B работает только с одной конкретной фотографией. Если бы я переместил код на контроллер A, все стало бы грязно.
Единственное, что мне не нравится в текущем решении, это то, что мне приходится обходить B вручную, а не быть «первоклассным» контроллером. Я должен передать некоторые вызовы вручную через A к B, и когда B хочет отобразить модальное диалоговое окно, он должен отправить presentModal…
на A. Что ужасно.