0

我正在尝试在 iPhone 上复制邮件应用程序的设计。在工具栏上,标签更新/更改以显示正在发送的邮件的状态。

复制它的最佳方法是什么?以下是我的想法,也许有人可以提出为什么其中一个会起作用或一个新想法。

为了统一起见,假设我有以下观点A -> B -> C - DA, B, 和C被推上和推下 UINavigationController 并有问题的工具栏。D是“撰写”窗口,是C. 让我们称我要创建的对象是obj.

代表

这需要我创建一个objinA并将其传递给B, 和C. C将调用诸如sendMailon之类的方法obj并尝试发送电子邮件。'obj' 将有一个委托方法obj:hasUpdateForToolbar:,该方法将向委托类 ( C) 发送一个数组以更新工具栏。通过发送过程,它将发送多条消息以更新进度条,并在最后说它已成功发送或最后一次电子邮件检查发生的日期。

此解决方案的问题是它不更新AB. 当C被弹出时,需要将委托重新分配给它,B并且(我认为)在下一个值被推送之前,工具栏中的旧值会闪现obj

通知

这将比委托更干净,因为您不必将对象传递给每个类,这意味着类之间的依赖性更少)。但是由于您没有连接,因此您必须C发布一条通知,说明有一封新邮件可以发送。obj必须接收该通知,然后发布新通知而不是委托方法。

这样做的问题是,在未显示视图时取消订阅通知是一种常见的做法。所以我认为订阅通知时会有相同的闪光,B并等待它被推送到工具栏的下一次更新。

KVC

我真的不确定如何设置它以便键值编码处理它。我是否能够设置一个视图obj,将其放入每个视图的工具栏中,并且随着它的更新(带有标签或进度条)它会反映在每个工具栏中?

那么哪个是最好的/我在这些方面缺少什么?

4

1 回答 1

0

您有一个应用程序控制器(可以是您的 AppDelegate 或另一个全局可见的对象。)

此应用程序控制器负责创建模型(获取电子邮件、发送电子邮件等)和 UI(撰写屏幕、UINavigationController、ViewControllers 等)。此应用程序控制器还将负责工具栏的内容:重新加载和撰写按钮,以及状态区域。

导航堆栈中的视图控制器不会担心此工具栏的内容,它们只需从应用程序控制器获取工具栏项(Compose、Reload、Status)。

单独的应用程序控制器将根据其模型的状态(发送、接收等)更新工具栏状态区域的内容。应用程序控制器与其模型之间的通信将是典型的 KVO 或通知。

于 2010-12-10T23:05:50.137 回答