我正在尝试创建一个用户界面,就像在App Store应用程序(iPad设备)中展示的那样。这是一种可滚动的网格(水平滚动),其中每个元素都包含可以在应用商店中选择的应用程序的概述(每个元素由图像,标题等组成)。我的目标是一样的。我有兴趣开发一个UIScrollView,其中元素的排列和显示。每个UI元素都包含图像和描述。
从前面的考虑中,我开发了一个ItemViewController.h / .m和相对的.xib(ItemView.xib)。每个元素都可以响应点按等操作。 ItemViewController.m管理此tap,因为它是File的Owner。使用类MainViewController.h / .m中的initWithNibNamad方法创建元素。该类包含UIScrollView。然后,与该项关联的视图将添加到UIScrollView。
由于可以有多个项目,您能否给我一些建议来管理MainViewController中的ItemViewController项目?我是否必须将每个对ItemViewController的引用存储在字典中(例如)?在第一时刻,我还考虑将MainViewController设置为ItemView.xib文件的所有者,但我认为管理项目的问题可能仍然存在。
提前谢谢你。我希望一切都清楚。
答案 0 :(得分:1)
看看AQGridView - 它应该能够满足您的需求。
答案 1 :(得分:1)
听起来我觉得这种结构倒退了。您不应该存储控制器中界面显示的项目。您应该有一个模型,其中包含控制器用于构建接口视图的项目。
所以你有一个包含产品列表及其相关元数据的模型。您的控制器查询该列表,为其中的每个项构建一个视图,并将这些视图添加到应用程序的视图层次结构中(可能在滚动视图中,如您所建议的那样)。与这些视图的任何交互都会回调到控制器,然后控制器会对模型进行更改。对模型的任何更改都应发布控制器侦听的通知,以便它知道更新(或只是重新加载)其呈现的视图。
请注意,在此安排中,模型中的一个项目可以在界面中多次表示。假设您要为标记为“Giant”的项目列出一个列表,并为标记为“Green”的项目列出。如果你有一个“Jolly Green Giant”产品,它将在两个列表中都有代表。但是因为模型中的相同项目是两者的来源,所以对一个项目的任何更改都会自动反映到另一个项目。这通常是理想的行为(如果您从“绿色”列表中删除了“Jolly Green Giant”,您还希望将其从“巨人”列表中删除。)
有关更多信息,请阅读模型视图控制器(MVC)模式。