Я решил, что шаблон проектирования KVO (Key Value Observer) имеет смысл для барботирования информации о состоянии от нижних уровней к верхним.Только та информация о состоянии, которая должна течь, наблюдается на каждом из соответствующих слоев.
В этом приложении событие касания тайла отправляется наблюдателю на следующем уровне вверх (уровень сетки), сообщая ему, что пользователь выбрал дату, которая является свойством класса тайла.
На уровне сетки он меняет свое состояние на основе своего текущего состояния и новой информации, которую его наблюдатель получает из тайла.(В моем календаре пользователь может выбрать диапазон дат, выбрав дату начала и дату окончания, и может продолжать нажимать на плитки, чтобы изменить выбор диапазона дат.) Это изменение состояния на уровне сетки приводит к изменению начала и /или дата окончания, поэтому свойство NSDictionary обновляется.
На уровне календаря наблюдатель видит изменение словаря startDate / endDate.Независимо от того, из какой сетки это получено (есть две сетки, и одновременно активна только одна из них. Плиткам и календарю об этом не нужно знать) даты начала и окончания календаря обновляются.
Календарь - это представление, встроенное в одно из других представлений приложения, инициализированное отображаемым месяцем и выбранным диапазоном дат (даты начала и окончания).Информация передается сверху вниз через указатели на каждое из непосредственных подпредставлений на любом уровне.Эти подпредставления заботятся о сохранении настроенных подпредставлений.Я избавился от необходимости добавлять явно добавленные методы делегатов или обратные вызовы, и это упростило соединения сверху вниз.Соединения идут только на непосредственный уровень выше или ниже в иерархии.
В конце концов, это может показаться не таким уж большим, потому что это выглядит довольно просто.Но это было не ясно, пока я провел некоторое время, думая об этом.Я надеюсь, что это дает другим идеи для их собственного кода.Я все еще хотел бы знать, есть ли другие предложения, отвечающие на мой вопрос.