Контроллеры iOS для пользовательских представлений
Я полностью за попытку создания облегченных контроллеров представления (тестируемость, разделение задач и т. Д. И т. Д.), Однако я не смог найти разумного решения или схемы, когда дело доходит до определенных случаев.
Очень распространенным случаем (с большим количеством примеров) является отделение контроллера представления от делегата табличного представления & источника данных; Я понимаю, это имеет полный смысл. Но как насчет случаев, когда контроллер представления может содержать несколько пользовательских представлений различной сложности? Что должно отвечать за контроль каждого из этих взглядов? Конечно, не только родительский контроллер представления.
Я склонен думать о UIViewController как о контроллере экрана, который тесно связан с каркасом пользовательского интерфейса и его событиями; он не несет единоличной ответственности за контроль одного конкретного взгляда. Чтобы дополнительно проиллюстрировать мою точку зрения, представьте табличное представление с парой различных ячеек-прототипов - некоторые из которых довольно сложны и могут потребовать, например, доступа к сети - как это должно управляться? Разумеется, ни один контроллер представления, источник данных или делегат не должны выступать в качестве "контроллера" для всех этих ячеек? И большая часть этой логики / ответственности не принадлежит самим представлениям ячейки, поэтому ее необходимо где-то делегировать.
Один из вариантов, о котором я подумал, - это просто создать объекты контроллера (подклассы NSObject), которые действуют как "контроллеры представления" для создаваемых мной пользовательских представлений, таких как объект контроллера для сложной ячейки табличного представления - его единственная обязанность - управлять этим один конкретный вид. Затем ячейка табличного представления делегирует объекту контроллера, который затем (если необходимо) делегирует обратно родительскому UIViewController. Хотя это сработает и поможет разделить проблемы, оно начинает чувствовать себя немного неловко со всеми слоями делегирования.
Есть ли у кого-нибудь хорошие предложения по работе с этими сценариями или есть хорошие примеры кода, демонстрирующие это?
Спасибо!