iPhone - UIToolbar - метод делегирования / уведомление / KVC - PullRequest
0 голосов
/ 09 декабря 2010

Я пытаюсь продублировать дизайн почтового приложения на 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, которое помещается на панель инструментов каждого представления, и когда оно обновляется (с меткой или индикатором выполнения), оно будет отражаться на каждой панели инструментов?

Так что же лучше / что мне не хватает в этих?

1 Ответ

0 голосов
/ 11 декабря 2010

У вас есть контроллер приложения (это может быть ваш AppDelegate или другой глобально видимый объект.)

Этот контроллер приложения отвечает за создание моделей (получение электронной почты, отправка электронной почты и т. Д.) И пользовательского интерфейса (созданиеэкран, UINavigationController, ViewControllers и т. д.).Этот контроллер приложения также будет отвечать за содержимое панели инструментов: кнопки «Перезагрузить» и «Создать», а также за область состояния.

Контроллеры представления в стеке навигации не будут беспокоиться о содержимом этой панели инструментов, они простополучать элементы панели инструментов (Compose, Reload, Status) от контроллера приложения.

Один только контроллер приложения обновляет содержимое области состояния панели инструментов на основе состояния своей модели (отправка, получение и т. д.)Тогда связь между контроллером приложения и его моделью будет вашим типичным KVO или уведомлениями.

...