Swift-如何从绑定到xib文件的自定义单元中继承

Jos*_*Lau 5 inheritance cell xib nib swift

我有一个名为NormalImageCell的自定义单元格,该单元格继承自UITableViewCell并绑定到xib。假设我想创建一个名为LargeImageCell的新单元格,该单元格从NormalImageCell继承而无需创建一个全新的xib。我无需接口构建器即可轻松地以编程方式完成此操作,但是由于将NormalImageCell绑定到一个xib,并且xib中的单元只能连接到一个自定义类和一个reuseIdentifier,我如何才能将其重用于LargeImageCell?

这在没有Interface Builder的情况下有效。

class LargeImageCell: NormalImageCell {...}

tableView.registerClass(NormalImageCell.self, forCellWithReuseIdentifier: NormalImageCell.id())
tableView.registerClass(LargeImageCell.self, forCellWithReuseIdentifier: LargeImageCell.id())
Run Code Online (Sandbox Code Playgroud)

这会因Interface Builder而崩溃:

tableView.registerNib(NormalImageCell.nib(), forCellWithReuseIdentifier: NormalImageCell.id())
tableView.registerNib(LargeImageCell.nib(), forCellWithReuseIdentifier: LargeImageCell.id())
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我在声明这样的nib和id方法:

class NormalImageCell: UITableViewCell {

    class func id() -> String {
        return String(self)
    }

    class func nib() -> UINib { 
        return UINib(nibName: String(self), bundle: nil) 
    }
}

class LargeImageCell: NormalmageCell {
    ...
}
Run Code Online (Sandbox Code Playgroud)

小智 0

您应该从主包中检索笔尖,如下所示:

class func nib() -> UINib {     

   return UINib(nibName: String(self), bundle: NSBundle.mainBundle())
}
Run Code Online (Sandbox Code Playgroud)