在collectionViewCell和tableViewCell中使用相同的视图

时间:2017-09-03 13:23:48

标签: ios swift uitableview uicollectionview

我使用自定义collectionViewCell创建了一个nib文件,并附加到viewController

class CustomCollectionView: UICollectionViewCell{}

现在我必须在tableView中使用确切的单元格。我创建了一个新的nib文件和viewController

class CustomTableView: UITableViewCell{}

我在其上复制了CustomCollectionView的漏洞代码。每件事情都运转正常,但我认为将CustomCollectionView的确切代码复制到CustomTableView并使用完全相同的nib文件但使用tableViewCell代替collectionViewCell就可以了。有什么办法可以优化我的工作吗?

2 个答案:

答案 0 :(得分:1)

正如您在suhit的回答中所说,您可以通过在CollectionViewCellTableViewCell子类中使用公共视图来实现此目的。您不需要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中使用ViewControllersUICollectionView可高度自定义,因此您也可以在UITableView中对UICollectionView执行任何操作。