我使用自定义collectionViewCell创建了一个nib文件,并附加到viewController
class CustomCollectionView: UICollectionViewCell{}
现在我必须在tableView中使用确切的单元格。我创建了一个新的nib文件和viewController
class CustomTableView: UITableViewCell{}
我在其上复制了CustomCollectionView
的漏洞代码。每件事情都运转正常,但我认为将CustomCollectionView
的确切代码复制到CustomTableView
并使用完全相同的nib文件但使用tableViewCell
代替collectionViewCell
就可以了。有什么办法可以优化我的工作吗?
答案 0 :(得分:1)
正如您在suhit的回答中所说,您可以通过在CollectionViewCell
和TableViewCell
子类中使用公共视图来实现此目的。您不需要ViewController,因为它会增加额外的开销。一个简单的UIView就足够了。一些代码显示我的意思:
class CustomTableViewCell: UITableViewCell {
var customView: CustomView!
func awakeFromNib() {
super.awakeFromNib()
customView = CustomView()
customView.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(customView)
customView.fillSuperview()
}
}
class CustomCollectionViewCell: UICollectionViewCell {
var customView: CustomView!
func awakeFromNib() {
super.awakeFromNib()
customView = CustomView()
customView.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(customView)
customView.fillSuperview()
}
}
extension UIView {
func fillSuperview() {
guard let superview = superview else {
return print("no superview")
}
topAnchor.constraint(equalTo: superview.topAnchor).isActive = true
bottomAnchor.constraint(equalTo: superview.bottomAnchor).isActive = true
leftAnchor.constraint(equalTo: superview.leftAnchor).isActive = true
rightAnchor.constraint(equalTo: contentVisuperviewew.rightAnchor).isActive = true
}
}
CustomView
类的示例实现:
class CustomView: UIView {
func initialize() {
//...
}
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
}
如果您希望在xib中创建自定义视图也很好,但它有点棘手。这超出了问题的范围,但我只是留下链接here以备不时之需。
答案 1 :(得分:0)
如果你想使用相同的视图,那么最好使用相似的类型视图,即在两个地方使用collectionView,这样你就可以在CustomCollectionViewCell
中使用ViewControllers
。 UICollectionView
可高度自定义,因此您也可以在UITableView
中对UICollectionView
执行任何操作。