我正在尝试在iPhone上复制邮件应用程序的设计。在工具栏上,标签更新/更改以显示正在发送的邮件的状态。
复制此内容的最佳方法是什么?以下是我的想法,也许有人可以建议为什么其中一个会起作用或者一个新想法。
为了统一,我们可以说我有以下观点: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
,并且在{{{}下推动下一个值之前,工具栏中会显示(我认为)旧值的闪存1}}。
通知
这比委托更干净,因为你不必将对象传递给每个类,这意味着类之间的依赖性更小)。但由于您没有连接,因此您必须obj
发布一条通知,告知有新邮件可以发送。 C
必须收到该通知,然后才会发布新通知而不是委托方法。
问题与此相关的是,通常的做法是在未显示视图时取消订阅通知。所以我认为会有obj
订阅该通知的闪存,并等待它被推送到工具栏的下一次更新。
KVC
我真的不确定如何设置它以便Key-Value Coding处理它。我能够在B
中设置一个视图,该视图被放入每个视图的工具栏中,并且当它更新时(使用标签或进度条)它会反映在每个工具栏中吗?
那么哪个最好/我在这些上缺少什么?
答案 0 :(得分:0)
你有一个应用程序控制器(可能是你的AppDelegate或另一个全局可见的对象。)
此应用程序控制器负责创建模型(获取电子邮件,发送电子邮件等)和UI(撰写屏幕,UINavigationController,ViewControllers等)。此应用程序控制器还将负责工具栏的内容:重新加载和撰写按钮以及状态区域。
导航堆栈中的视图控制器不会担心此工具栏的内容,只需从应用程序控制器获取工具栏项(Compose,Reload,Status)。
应用程序控制器将根据其模型的状态(发送,接收等)更新工具栏状态区域的内容。应用程序控制器与其模型之间的通信将是典型的KVO或通知。