【问题标题】:How to distinguish 3 objects in a custom cells如何区分自定义单元格中的 3 个对象
【发布时间】:2016-12-16 15:37:58
【问题描述】:

我正在制作一个 iPhone 应用程序。

在这个应用程序中,我必须如下所示。 我不允许使用集合视图。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    尝试以NSDictionaryNSArray 形式获取数据,其中包含要在单元格上显示的3 个对象的数组。

    在自定义单元格中将tag 分配给UImageView

    cellForRowAtIndexPath 中,获取3 个对象并使用switch 大小写应用图像。

    一切都取决于您如何从服务器获取数据

    【讨论】:

    • 我从服务器获取数据作为数组。
    • 1.我想对 UIView 类型的对象进行 Subcall。
    • 然后是否有任何机制来操作这个对象,但标签必须以 1,2 和 3 出现在图片中
    • 您可以使用 UI 对象的 'CALayer' 将数据保存在其中。喜欢[layer setValue:value forKey@"Key"]
    【解决方案2】:

    您可以使用插座集合,它会给您一个UIImageView 数组,您可以为图像视图分配不同的标签,以便您可以分配给它们。

    您可以使用这些指南来了解奥特莱斯系列的工作原理:

    http://nshipster.com/ibaction-iboutlet-iboutletcollection/

    http://useyourloaf.com/blog/interface-builder-outlet-collections/

    【讨论】:

      【解决方案3】:

      所有标准程序都应该可以实现这一点,但它只取决于你想做到多好。

      直接的过程是在单元格中公开图像视图和标签的出口,并在出列/创建表格视图单元格时为这些出口分配正确的值。

      第一次升级是在单元格上公开 3 个设置器,以简单地将模型设置为每个设置器,然后在内部设置单元格内的图像和文本。

      接下来您可能要做的是插入一个对象数组(在您的情况下总是发送最多 3 个),而不是使用 3 个 setter。

      此时,您实际上可能更愿意在单元格内使用集合视图,并使单元格成为集合视图的数据源。但这完全是可选的。

      现在,由于您可能仍然不喜欢表格视图数据源,您可以创建另一个模型,其中包含一个对象数组(在您的情况下最多为 3 个),并创建一个系统,将您的原始对象数组分配到这些容器。

      如果您需要处理按钮或其他触摸事件,可以使用集合视图委托或 3 个按钮来处理它们,在这两种情况下,我建议您处理单元格中的那些并为单元格创建一个自定义委托,该委托将报告事件与适当的模型。

      这会共同生成以下内容:

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

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

      【讨论】:

      • 谢谢@Matic。我会看到的。
      【解决方案4】:

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

      我会这样看。

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

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

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

        • 您还需要在此单元格中实现 touchesEnded: 以便您可以确定最后一次触摸三个子单元格中的哪一个,并且您需要能够查询或将其传达回控制器,可能使用代表团。如果单元格可以反馈选择是在子单元格 0,1 还是 2 中,那么这与 UITableViewDelegate 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 ]
      

      【讨论】:

      • 谢谢杰夫。我以同样的方式实现它。选择逻辑,还不是我的要求。但很高兴知道。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2014-09-25
      相关资源
      最近更新 更多