Я пытаюсь продублировать дизайн почтового приложения на iPhone. На панели инструментов метка обновляется / изменяется, чтобы показать статус отправляемой почты.
Как лучше всего повторить это? Вот то, что я обдумал, и, возможно, кто-то может подсказать, почему один из них сработает, или новая идея.
Ради единства, допустим, у меня есть следующие представления: A -> B -> C - D
. A
, B
и C
включаются и выключаются UINavigationController и имеют соответствующую панель инструментов. D
является окном "compose" и является модальным окном C
. И давайте назовем объект, который я пытаюсь создать, это obj
.
Делегирование
Для этого потребуется создать obj
в A
и передать его B
и C
. C
вызовет такой метод, как sendMail
для obj
, и попытается отправить электронное письмо. 'obj' будет иметь метод делегата obj:hasUpdateForToolbar:
, который будет отправлять массив делегированному классу (C
) для обновления панели инструментов. Через процесс отправки он будет отправлять несколько сообщений, чтобы обновить индикатор выполнения и в конце сказать, что он был успешно отправлен или дата, когда произошла последняя проверка электронной почты.
Проблема с этим решением в том, что он не обновляет A
или B
. Когда C
удаляется, делегату нужно будет переназначить значение B
, и (я думаю) будет мигать старое значение на панели инструментов, прежде чем следующее значение будет выдвинуто obj
.
Уведомления
Это будет чище, чем делегат, так как вам не придется передавать объект каждому классу, что означает меньшую зависимость между классами). Но поскольку у вас нет соединения, вам нужно будет C
опубликовать уведомление о том, что новое письмо готово к отправке. obj
должен будет получить это уведомление и затем будет публиковать новые уведомления вместо метода делегата.
Проблема в этом состоит в том, что обычной практикой является отмена подписки на уведомление, когда представление не отображается. Поэтому я думаю, что будет та же самая вспышка, когда B
подписывается на уведомление и ждет, пока оно не будет отправлено при следующем обновлении панели инструментов.
КВЦ
Я действительно не уверен, как я мог настроить это так, чтобы Кодирование значения ключа позаботилось об этом. Могу ли я настроить представление в obj
, которое помещается на панель инструментов каждого представления, и когда оно обновляется (с меткой или индикатором выполнения), оно будет отражаться на каждой панели инструментов?
Так что же лучше / что мне не хватает в этих?