这是我的表格视图单元格的继承树。

 +----------------+
 | UITableViewCel |
 +-------+--------+
         ^
         |
 +-------+--------+
 |  BaseFormCell  |
 +-------+--------+
         ^
         |
+--------+---------+
| TypedFormCell<T> |
+--------+---------+
         ^
         |
+--------+----------+
| TextFieldFormCell |  : TypedFormCell<String>
+-------------------+

其中TextFieldFormCell具有关联的xib文件,该文件用于实例化自身。

当我调用Bundle.main.loadNibNamed("TextFieldFormCell", owner: nil, options: nil)时,抛出一个异常并说

[ setValue:forUndefinedKey:]:此
类别与键名标签不兼容。

我注意到xib没有为我实例化TextFieldFormCell。相反,它创建了UITableViewCell并尝试将nameLabel注入UITableViewCell,这导致了异常。

这是否意味着IB不支持通用类或从通用类继承的类?

这是此演示的GitHub存储库。 https://github.com/hikui/TypedCellDemo

最佳答案

另一种替代方法:

在您的类viewDidLoad中注册nib文件

    let nibName = UINib(nibName: "<nibName>", bundle:nil)
    self.tableView.registerNib(nibName, forCellReuseIdentifier: "<CellIdentifier>")

在您的cellForRowAtIndexPath中:
    let cell : TextFieldFormCell? = tableView.dequeueReusableCell(withIdentifier: "<CellIdentifier>") as! TextFieldFormCell?

07-26 07:17