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 文件是否可以与该父级有相同的出口?甚至如何做到这一点?
【问题讨论】:
您的两个单元类需要继承自定义A
和C
的公共超类,子类定义B
和D
。
您好 Paulw11, 是的,这就是我想要开始工作的方法。但请检查我的编辑 - 我想这实际上是我的主要挑战。
您需要两个 nib 文件,一个具有自定义类 type1
,另一个具有自定义类 type2
。父类定义的插座对type1
和type2
都是可见的,因此您可以连接所有内容。
【参考方案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 UIButton,单元格未在 (id)sender 中更新
iPhone - 两个不同的自定义单元格,具有不同的设计,在同一个 UITableViewController - 单元格保持初始大小