如何区分自定义单元格中的3个对象

时间:2016-08-10 10:04:56

标签: ios objective-c iphone xcode cocoa-touch

我正在制作iPhone应用程序。

在这个应用程序中,我必须看下面的内容。 我不允许使用收藏视图。

Table View with Custom cell

我正在使用tableview和自定义单元格。我很容易融入其中。意味着在自定义单元格中获取3个子视图看看。

这里的问题是在单元格中,我如何区分每个对象。这样我就可以调用每个对象,在图像视图上设置图像。

是否有任何面向对象的机制来区分单元格中的所有3个对象?

4 个答案:

答案 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个按钮处理它们,在这两种情况下,我建议你处理单元格中的那些并为单元格创建一个自定义委托,它将报告具有适当模型的事件。

这一起产生以下内容:

  • 当您收到数据时,会调用一个容器类来分发您的对象数组(分成3个组)并将其分配给您的表视图数据源(通常是视图控制器)
  • 行数与数组中的容器数相同
  • 行的单元格将具有行索引的容器分配给单元格。它将自己指定为代表
  • Cell通过集合视图,独立出口或出口集合在内部处理对象分发。
  • 单元格处理操作并将其报告给代理(- (void)myCell:(MyCell *)cell selectedItem:(MyObject *)item;
  • 单元代表可以再次处理对报告的操作执行的操作

此外,如果要避免单元格内的集合视图,可以使用xib创建自定义视图,这样就不会复制标签,图像视图等。然后只需在单元格中创建3个自定义视图。此外,通过使用inspectabledesignable,这些视图将在故事板中显示。

答案 3 :(得分:1)

首先我要说对使用UICollectionView的限制是愚蠢的。你还在瞄准ios5吗?

我会这样看。

  1. 为'subcell'创建自己的视图类让我们将这个术语用于每个单元格3个视图的任何单个实例。我是UIImageView的子类,在底部添加了名称的标签,以及一种'setSelected:'类型的方法,通过不同的绘图通过用户交互选择时突出显示。

  2. 创建一个UITableViewCell子类来托管和布局最多三个这些子单元。我说最多3个因为最后一个单元格可能包含1或2个子单元而不是3表示如果要表示的总人数不能被3整除。

  3. 选择逻辑:您需要覆盖'setSelected:',因为您要取消选择并仅选择子单元格,您不希望整个单元格在选择时突出显示,仅三分之一。

    • 您还需要在此单元格中实现touchesEnded:以便您可以找出最后触摸的三个子单元中的哪一个,并且您需要能够查询或将其传回控制器,可能使用代表团。如果单元格可以回传选择是否在子单元格0,1或2中,那么这与UITableViewDelegate didSelectAtIndexPath一起应该很好地映射到您的模型 - selectedPerson = myArrayOfPeople[ (indexPath.row * 3) + subcellIndex ]
  4. 您将能够以类似的方式在cellForRowAtIndexPath中装饰您的单元格。

    personOne = model.arrayOfPeople[indexPath.row*3]
    personTwo = model.arrayOfPeople[indexPath.row*3 +1 ]
    personThree = model.arrayOfPeople[indexPath.row*3 + 2 ]
    
相关问题