我正在制作iPhone应用程序。
在这个应用程序中,我必须看下面的内容。 我不允许使用收藏视图。
我正在使用tableview和自定义单元格。我很容易融入其中。意味着在自定义单元格中获取3个子视图看看。
这里的问题是在单元格中,我如何区分每个对象。这样我就可以调用每个对象,在图像视图上设置图像。
是否有任何面向对象的机制来区分单元格中的所有3个对象?
答案 0 :(得分:1)
尝试将NSArray
的数据作为NSDictionary
包含要在单元格上显示的3个对象的数组。
在自定义单元格中将tag
分配给UImageView
。
在cellForRowAtIndexPath
中,获取3个对象并使用switch
案例应用图片。
一切都取决于你如何从服务器获取数据
答案 1 :(得分:1)
您可以使用将为您提供UIImageView
数组的插座集合,并且可以为imageview指定不同的标签,以便分配给它们。
您可以使用这些指南了解插座集合的工作原理:
http://nshipster.com/ibaction-iboutlet-iboutletcollection/
http://useyourloaf.com/blog/interface-builder-outlet-collections/
答案 2 :(得分:1)
所有标准程序都应该能够实现这一目标,但这只取决于你想要做到这一点的好处。
直接的过程是在单元格中显示图像视图和标签的出口,并为出列/创建表格视图单元格时分配正确的值。
第一次升级是在单元格上放置3个setter,只需将模型设置为每个,然后在内部设置单元格内的图像和文本。
接下来你要做的就是插入一个对象数组(在你的情况下总是最多发送3个)而不是3个setter。
此时,您实际上可能更喜欢在单元格中使用集合视图,并使单元格成为集合视图的数据源。但这完全是可选的。
既然您可能仍然不喜欢表视图数据源,您可以创建另一个包含对象数组的模型(在您的情况下最多为3个)并创建一个系统,将原始对象数组分发到数组中这些容器。
如果那时你需要处理按钮或其他触摸事件,可以使用集合视图委托或3个按钮处理它们,在这两种情况下,我建议你处理单元格中的那些并为单元格创建一个自定义委托,它将报告具有适当模型的事件。
这一起产生以下内容:
- (void)myCell:(MyCell *)cell selectedItem:(MyObject *)item;
)此外,如果要避免单元格内的集合视图,可以使用xib创建自定义视图,这样就不会复制标签,图像视图等。然后只需在单元格中创建3个自定义视图。此外,通过使用inspectable
和designable
,这些视图将在故事板中显示。
答案 3 :(得分:1)
首先我要说对使用UICollectionView的限制是愚蠢的。你还在瞄准ios5吗?
我会这样看。
为'subcell'创建自己的视图类让我们将这个术语用于每个单元格3个视图的任何单个实例。我是UIImageView的子类,在底部添加了名称的标签,以及一种'setSelected:'类型的方法,通过不同的绘图通过用户交互选择时突出显示。
创建一个UITableViewCell子类来托管和布局最多三个这些子单元。我说最多3个因为最后一个单元格可能包含1或2个子单元而不是3表示如果要表示的总人数不能被3整除。
选择逻辑:您需要覆盖'setSelected:',因为您要取消选择并仅选择子单元格,您不希望整个单元格在选择时突出显示,仅三分之一。
didSelectAtIndexPath
一起应该很好地映射到您的模型 - selectedPerson = myArrayOfPeople[ (indexPath.row * 3) + subcellIndex ]
您将能够以类似的方式在cellForRowAtIndexPath中装饰您的单元格。
personOne = model.arrayOfPeople[indexPath.row*3]
personTwo = model.arrayOfPeople[indexPath.row*3 +1 ]
personThree = model.arrayOfPeople[indexPath.row*3 + 2 ]