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