Я пытаюсь дублировать дизайн почтового приложения на iPhone. На панели инструментов метка обновляется/изменяется, чтобы отображать статус отправляемой почты.iPhone - UIToolbar - метод делегирования/уведомление/KVC
Каков наилучший способ дублирования этого? Следующее - это то, что я продумал, и, возможно, кто-то может предположить, почему один из них будет работать или новая идея.
Для единства, скажем, у меня есть следующие виды: A -> B -> C - D
. A
, B
и C
нажимаются и выходят из UINavigationController и имеют соответствующую панель инструментов. D
- это «составное» окно и является модальным окном C
. И позволяет вызвать объект, который я пытаюсь создать, это obj
.
Делегат
Это потребовало бы мне создать один obj
в A
и передать его B
и C
. C
назвал бы такой метод, как sendMail
, по адресу obj
, и он попытается отправить электронное письмо. «obj» будет иметь метод делегирования obj:hasUpdateForToolbar:
, который отправляет массив в делегированный класс (C
), чтобы обновить панель инструментов. Через процесс отправки он отправил несколько сообщений, чтобы обновить индикатор выполнения, а в конце сказать, что он был успешно отправлен или дата, когда произошла последняя проверка электронной почты.
Проблема с этим решением не обновляется A
или B
. Когда вызывается C
, делегат должен быть переназначен до B
, и будет (я думаю) вспышка старого значения на панели инструментов до того, как следующее значение будет нажато obj
.
Уведомление
Это было бы чище, чем делегат в том, что вы не должны передавать объект к каждому классу, что означает меньшую зависимость между классами). Но поскольку у вас нет связи, вам нужно будет отправить C
сообщение о том, что есть новое письмо, готовое к отправке. obj
должен будет получить это уведомление, а затем будет отправлять новые уведомления вместо метода делегата.
Проблема заключается в том, что распространенная практика заключается в том, чтобы отказаться от подписки на уведомление, когда представление не отображается. Поэтому я думаю, что будет такая же вспышка, как и B
, подписывается на уведомление и ждет, когда он подтолкнет следующее обновление для панели инструментов.
КВЦ
Я действительно не знаю, как я мог установить это так, что кодирование Key-Value заботится о нем. Могу ли я настроить вид в obj
, который попадает на панель инструментов каждого вида, и по мере его обновления (с меткой или индикатором выполнения) это будет отражено на каждой панели инструментов?
Итак, что лучше/что я пропущу на них?
Это имеет большой смысл. Я закончил тем, что просто передал делегат через каждый объект, так как не каждый просмотр в моем приложении нуждался в доступе к нему. Спасибо за ответ. – RyanJM 2010-12-21 14:28:40