【问题标题】:Access child views in custom UITableViewCell访问自定义 UITableViewCell 中的子视图
【发布时间】:2015-11-11 09:51:48
【问题描述】:

背景:

我正在尝试创建一个包含大约 4 种不同单元格布局的表格视图。

起初,我考虑使用静态表视图来解决问题,因为行数有些固定(不超过 10)

但是,经过一番思考,我决定我真的不想被UITableViewController 捆绑。因此,我尝试使用动态表格视图来实现它。

问题:

创建 4 个原型单元后,我发现我需要访问单元中的子视图(以更新它们的值)。但我知道的唯一可能的方法似乎是:

1. Create a subclass for each prototype cell, and create `IBOutlet` to the child views

2. Assign `tag` for each child view for later access

但是我不是很喜欢这两种方法...

第一个太麻烦了,第二个解决方案中的标签似乎不是很具体(通过一些幻数访问子视图..)

所以,我想知道:

  1. 有没有更好的实践来实现这种 表视图。 (多个单元格原型,以及固定的行号)

  2. 静态表视图是更好的方法吗?如果有,是否会有 当我被绑定到UITableViewController 时有什么限制吗? 例如,如果我需要更复杂的 UI,并决定在其上添加更多视图,UITableViewController 的灵活性会低于UIViewController

非常感谢!

【问题讨论】:

    标签: ios iphone swift uitableview swift2


    【解决方案1】:

    如果单元格非常相似但布局不同,则它们可以共享一个公共 UITableViewCell 子类,前提是该类不需要知道其所在的布局,只需配置可用的插座。

    如果代码确实需要了解使用的布局,那么最好将它们设为单独的子类。

    对于 Swift,使用 isas? 来确认单元格的正确子类(对于 Objective C,它将是 isKindOfClass 方法)。

    【讨论】:

    • 嗨!如果我只对所有原型单元格使用 UITableViewCell,如何更新每个单元格中 UI 控件的值?
    • 我的意思是你可以创建一个用于所有原型的子类。如果它们都有相似的元素,只是排列方式不同,这是有道理的。然后它将拥有所有原型所需的所有插座,尽管在某些情况下可能其中一些保持为零(使您的插座适当的选项(?)不会强制解包(!)。
    • 我觉得目前你的回答似乎有道理,我接受了
    【解决方案2】:

    1.如果你想访问他的 IBOutlets,你确实需要继承 UITableViewCell。 为了区分单元格,只需使用 isKindOfClass

    2.这取决于您的细胞彼此之间的差异程度。如果它们的结构略有不同,您可能需要考虑将元素放在 cellForRow 中。尝试查看内置结构,因为它可能会为您节省一些子类化。 这些结构具有内置参数,例如:图像、文本等。 不过它们的结构更严格

    这些是可用的类型:

    UITableViewCellStyleDefault,    // Simple cell with text label and optional image view (behavior of UITableViewCell in iPhoneOS 2.x)
    UITableViewCellStyleValue1,     // Left aligned label on left and right aligned label on right with blue text (Used in Settings)
    UITableViewCellStyleValue2,     // Right aligned label on left with blue text and left aligned label on right (Used in Phone/Contacts)
    UITableViewCellStyleSubtitle    // Left aligned label on top and left aligned label on bottom with gray text (Used in iPod).
    

    我真的不明白你为什么要使用标签?

    【讨论】:

    • 我考虑使用标签的原因是因为我不想为所有原型单元创建子类。实际上,我想避免使用 IBOutlets..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2015-10-28
    相关资源
    最近更新 更多