如何在swift中使用xib子类化自定义Cell类

Joh*_*kon 7 uitableview subclassing tablecell ios swift

我遇到了简单的问题,无法找到任何解决方案.

MyCell.xib有文件所有者MyCell : UITableViewCell类.

我这样用它:

viewDidLoad方法:

 let nib = UINib(nibName: "MyCell", bundle: nil)
 self.tableView.register(nib, forCellReuseIdentifier: "myIdentifier")
Run Code Online (Sandbox Code Playgroud)

tableView cellForRowAt方法:

 let cell = tableView.dequeueReusableCell(withIdentifier: "myIdentifier", for: indexPath) as? MyCell
Run Code Online (Sandbox Code Playgroud)

它运作良好.

我将我的类子类化为添加一些新方法:

 class SuperCell : MyCell {
      func coolMethod {
           print("cool")
      }
 }
Run Code Online (Sandbox Code Playgroud)

并尝试使用它:

let cell = tableView.dequeueReusableCell(withIdentifier: "myIdentifier", for: indexPath) as? SuperCell
Run Code Online (Sandbox Code Playgroud)

它返回 nil

我怎样才能使它工作?

我尝试在InterfaceBuilder中使用标识符myIdentifier和类创建原型单元格SuperCell,但它没有帮助.

我为什么需要它

我只想对不同的单元类使用相同的视图(xib).

在我的情况下,我有MyCell视图(xib)的公共cell().MyCell完全描述字段(IBOutlets).此外,我想创建一些子类的另一个单元类MyCell,但它们将提供这些IBOutlet的一些行为.例如,FirstMyCell : MyCell将有方法setFieldsFrom(objectOne: ObjectOne),SecondMyCell : MyCell并将有另一种方法setFieldsFrom(anotherObject: ObjectAnother).

当然,我可以将这两种方法添加到我的MyCell课程中,但它会是不洁净的.

sha*_*ght 2

  • 不要设置文件所有者(将其删除)
  • 确保您的XIB自定义类别设置为SuperCell