ios中具有共同特征的自定义单元格

Posted

技术标签:

【中文标题】ios中具有共同特征的自定义单元格【英文标题】:Custom cells with common features in ios 【发布时间】:2018-08-04 11:14:44 【问题描述】:

我有一个应用程序,其中有一个表格视图。在这个表格视图中,我目前有 8 种不同类型的单元格。这些细胞中的每一个都是不同的,但也有相似之处。

作为示例(为简单起见,仅使用 2 个单元格)。想象一下,您有一个单元格 1,它可以分为 3 个部分:

--------------A-------------- --------------B-------------- --------------C--------------

现在单元格 2 也有 3 个部分。 A部分和C部分与cell1中的相同(当然数据不同,但结构相同):

--------------A-------------- --------------D-------------- --------------C--------------

目前,在我的 cellForRowAt 方法中,我只检查单元格类型应该是 1 还是 2,然后将该类型的单元格出列。挑战在于我想避免在代码中将 A 部分和 C 部分设置为两个不同的位置。

例如。而不是

if type == type1 
    //Set A
    //Set B
    //Set C
 else if type == type2 
    //Set A
    //Set D
    //Set C

我愿意

//Set A
//Set C
if type == type1 
    //Set B
 else if type == type2 
    //Set D

我想知道是否有办法“抽象”这些共性?

如果有什么不清楚的地方请告诉我。

编辑:IB 挑战

我可能还应该提到,对我来说,一个棘手的部分是弄清楚父单元格如何适应 IB。我对每种单元格类型都有单独的 xib 文件,但如果我只有一个包含 A 和 C 部分的父 swift 文件,那么我的其他 xib 文件是否可以与该父级有相同的出口?甚至如何做到这一点?

【问题讨论】:

您的两个单元类需要继承自定义AC 的公共超类,子类定义BD 您好 Paulw11, 是的,这就是我想要开始工作的方法。但请检查我的编辑 - 我想这实际上是我的主要挑战。 您需要两个 nib 文件,一个具有自定义类 type1,另一个具有自定义类 type2。父类定义的插座对type1type2 都是可见的,因此您可以连接所有内容。 【参考方案1】:

Parent TableViewCell

class BaseTableViewCell: UITableViewCell 

  @IBOutlet weak var ALabel: UILabel!
  @IBOutlet weak var CLabel: UILabel!

    override func awakeFromNib() 
        super.awakeFromNib()
        // Initialization code
    

    override func setSelected(_ selected: Bool, animated: Bool) 
        super.setSelected(selected, animated: animated)
        // Configure the view for the selected state
    


Subclass of BaseCell

class TypeOneTableViewCell: BaseTableViewCell 

  @IBOutlet weak var BLabel: UILabel!

    override func awakeFromNib() 
        super.awakeFromNib()
        // Initialization code
    

    override func setSelected(_ selected: Bool, animated: Bool) 
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    


【讨论】:

嗨,何塞,这似乎正是我想要的!是否可以将插座连接到多个控制器?不确定我是否正确地说明了这一点,但具体在您的示例中。是否可以将 BaseViewController 中的 ALabel 和 CLabel 连接到 TypeOneTableViewCell 和 TypeTwoTableViewCell?我现在当然会尝试这个,我只是想知道这样做是否有任何陷阱? 没有任何PitFalls,这是正确的做法。 另外,我不确定“多个控制器”是什么意思,在这个例子中,我们谈论的是视图层次结构(TableViewCells),如果你可以使用相同的模式想要对 ViewControllers 做同样的事情。 嗨,何塞,我只是在测试它。当我弄清楚所有步骤时,我肯定会将其标记为正确答案!通过多个控制器,我的意思是会有多个继承 BaseViewController 的“子”控制器。据我了解,所有这些子控制器都需要将它们的 A 和 C 部分链接到 BaseViewController 中的 A 和 C 插座。 是的。没错,您可以从父视图控制器继承任意数量的子视图控制器,它们只需要包括更改部分(B 或 D),以及如何按照我在图像中的指示连接插座.

以上是关于ios中具有共同特征的自定义单元格的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 具有可变高度的自调整单元格

具有可变高度的自定义单元格

具有目标操作的单元格上的 iOS UIButton,单元格未在 (id)sender 中更新

iPhone - 两个不同的自定义单元格,具有不同的设计,在同一个 UITableViewController - 单元格保持初始大小

具有多行 UILabel 的自定义 Tableview 单元格需要动态高度

具有单元格引用输入的自定义函数