UISplitViewController - 视图控制器之间通信的最佳设计模式

时间:2011-12-01 14:00:55

标签: objective-c ios ipad design-patterns uisplitviewcontroller

我第一次在我的应用程序中使用UISplitViewController。主视图控制器是一个表视图控制器,详细视图控制器只是一个普通的视图控制器。

对于从master到detail的通信,我将详细信息设置为master的委托。但我还需要主人能够响应细节的变化(相应的表格视图单元格的内容会更新以反映更改。)

主人也可以成为细节的代表吗?或者这是不好的编程习惯?对此有更好的方法吗?

感谢您的任何建议。

3 个答案:

答案 0 :(得分:1)

您可以提供特定于您的模型的委托协议,该协议由您的控制器共享。该协议可以包含itemContentDidChange:withIndex:等方法,为监听器提供模型中已更改内容的信息。如果将两个控制器注册为共享模型的委托,两者都实现此共享协议,则将删除跨控制器依赖关系,而不会引入任何新的依赖关系。

然而,这只是我的意见,这是相当主观的。你的方法也很完美 - 我认为主人在细节是主人的代表的同时成为细节的代表是绝对可以的。它比给每个控制器指向另一个控制器更好,因为你不需要考虑保留周期。

答案 1 :(得分:0)

听起来你只需要一个委托,因为detailView只需要告诉masterView在列表上的'reloadData'。它们都使用的数据应该真正共享,因此可以在创建时作为指针传递给detailView,然后它可以在完成后告诉masterView tableView重新加载数据之前自行修改。

答案 2 :(得分:0)

他们成为彼此的代表是完全没有问题的。没有涉及所有权,因此没有循环引用。