iPhone - UIToolbar - 委托方法/通知/ KVC

时间:2010-12-09 03:04:45

标签: iphone delegates notifications uitoolbar nsnotifications

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

复制此内容的最佳方法是什么?以下是我的想法,也许有人可以建议为什么其中一个会起作用或者一个新想法。

为了统一,我们可以说我有以下观点:A -> B -> C - DABC被推入和关闭UINavigationController并使工具栏受到质疑。 D是“撰写”窗口,是C的模态窗口。然后让我调用我想要创建的对象是obj

代表

这需要我在obj中创建一个A并将其传递给BCC会在sendMail上调用obj等方法,并尝试发送电子邮件。 'obj'将有一个委托方法obj:hasUpdateForToolbar:,它会将一个数组发送到委托类(C)以更新工具栏。通过发送过程,它会发送多条消息,以便更新进度条,最后说它已成功发送或最后一次电子邮件检查发生的日期。

使用此解决方案的问题是它不会更新AB。当弹出C时,需要将委托重新分配给B,并且在{{{}下推动下一个值之前,工具栏中会显示(我认为)旧值的闪存1}}。

通知

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

问题与此相关的是,通常的做法是在未显示视图时取消订阅通知。所以我认为会有obj订阅该通知的闪存,并等待它被推送到工具栏的下一次更新。

KVC

我真的不确定如何设置它以便Key-Value Coding处理它。我能够在B中设置一个视图,该视图被放入每个视图的工具栏中,并且当它更新时(使用标签或进度条)它会反映在每个工具栏中吗?

那么哪个最好/我在这些上缺少什么?

1 个答案:

答案 0 :(得分:0)

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

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

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

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