Несколько контроллеров представления на экране сразу?

Я пытаюсь перенести голову вокруг контроллеров в Касании Какао. Основная проблема состоит в том, что я хотел бы иметь больше чем один контроллер “на экране” сразу – я хочу иметь большое представление (с контроллером A) состоявший из меньших представлений, которыми управляют их собственные контроллеры (скажите что B). Я хотел бы иметь его этот путь, потому что подразделение делает код намного более чистым. То, что плохо, - то, что дополнительные контроллеры (типа B) не являются “первоклассными гражданами” на экране, например, они не получают запросы авторотации и уведомления. (И не может легко отобразить модальные контроллеры, они должны отправить presentModal… обменивайтесь сообщениями к их родительскому контроллеру.)

Каково различие между A и контроллерами B с точки зрения Какао? Система сохраняет некоторый указатель на “frontmost контроллер”, привилегированный, в который это отправляет уведомления и такой материал? Почему другие контроллеры не получают их, даже при том, что их представления находятся на экране? Имеют несколько контроллеров “на экране”, рассмотрел взлом? Или это поддерживается, и я просто упускаю некоторую суть?Спасибо.


Больше о проблеме я пытаюсь решить: Я пишу простой браузер фотографий. Фотографии отображены в полном экране, пользователь может пролистать влево или вправо для изменения фотографий. Контроллер заботится о части прокрутки, и контроллеры B заботятся о каждой фотографии самой.

Изоляция B походила на хорошую идею, так как фотографии загружаются из сети и существует много, который может произойти, как сеть мог бы снизиться и так далее. В контроллере B код довольно прост, с тех пор B только работает с одной конкретной фотографией. Если бы я переместил код в контроллер, то вещи стали бы грязными.

Единственная вещь мне не нравится приблизительно текущее решение, состоит в том, что я должен вручную работать вокруг B, не являющегося “первоклассным” контроллером. Я должен передать некоторые вызовы вручную через к B и когда B хочет отобразить модальное диалоговое окно, это должно отправить presentModal… к A. Который ужасен.

20
задан Kris Roofe 2 May 2017 в 03:10
поделиться

1 ответ

Во-первых, и это важно, контроллеры представлений не отображаются «на экране» - представления не отображаются. Ваш контроллер «верхнего уровня», безусловно, может передавать типы сообщений, которые вы описываете, своим «подчиненным контроллерам представления». Фактически, так работает большинство приложений. Рассмотрим приложение, в котором есть панель вкладок, а представления используют контроллеры навигации.На самом деле у вас есть несколько контроллеров представления, «работающих» одновременно, каждый из которых имеет собственное представление на экране одновременно - ваш «корневой» контроллер представления будет экземпляром (или подклассом) UITabBarController, который затем имеет несколько вложенных UINavigationController, каждый который будет отображать вложенные контроллеры представления (например, экземпляр или подкласс UITableViewController).

Возможно, вы захотите немного почитать о том, как работают цепочки респондентов . Рассмотрим событие касания. Он будет сгенерирован для представления, ближайшего к вершине стека, которое может принимать события, которое также находится под краном. Если это представление не может справиться с этим, оно передается вверх по пищевой цепочке иерархии представлений, пока что-то с ним не справится (а затем съест).

Что касается специфики вашего вопроса, то в целом я не совсем уверен, что именно описываемая вами стратегия приносит вам пользу с точки зрения сложности. Это зависит от того, как именно вы реализуете что-либо, но наличие отдельных контроллеров представления для каждого небольшого подвида может потребовать большего количества бухгалтерского кода, чем просто наличие одного контроллера представления, который знает обо всех своих компонентах подвида.

8
ответ дан 29 November 2019 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: