如何以编程方式创建具有唯一背景图像和UIButtons的UICollectionView单元格

时间:2016-12-12 15:24:39

标签: uibutton uicollectionview swift3 uicollectionviewcell

我创建了一个UICollectionView,它为每个单元格使用相同的背景图像(单元格大小是屏幕大小)。如何为每个单元格设置独特的背景图像和按钮?请参阅下面的代码:

PageCell

import UIKit

class PageCell: UICollectionViewCell {

override init(frame: CGRect) {
    super.init(frame: frame)
    setupViews()

}

let imageView: UIImageView = {
    let iv = UIImageView()
    iv.contentMode = .scaleAspectFill
    iv.backgroundColor = .yellow
    iv.image = UIImage(named: "bg")
    iv.clipsToBounds = true
    return iv
}()

func setupViews() {
    addSubview(imageView)
    imageView.anchorToTop(top: topAnchor, left: leftAnchor, bottom: bottomAnchor, right: rightAnchor)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
}

MenuViewController:

class MenuViewController: UIViewController, UICollectionViewDataSource,   UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {


lazy var collectionView: UICollectionView = {
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .horizontal
    layout.minimumLineSpacing = 0
    let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
    cv.backgroundColor = .red
    cv.dataSource = self
    cv.delegate = self
    cv.isPagingEnabled = true
    return cv
}()


let cellId = "cellId"

override func viewDidLoad() {
    super.viewDidLoad()

    view.addSubview(collectionView)

    //use autolayout instead
    collectionView.anchorToTop(top: view.topAnchor, left: view.leftAnchor, bottom: view.bottomAnchor, right: view.rightAnchor)

    collectionView.register(PageCell.self, forCellWithReuseIdentifier: cellId)
}

func collectionView(_ collectionView: UICollectionView,    numberOfItemsInSection section: Int) -> Int {
    return 4
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt     indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath as IndexPath)

    return cell
}

func collectionView(collectionView: UICollectionView, layout     collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    return CGSize(width: view.frame.width, height: view.frame.height)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
}

extension UIView {

func anchorToTop(top: NSLayoutYAxisAnchor? = nil, left:     NSLayoutXAxisAnchor? = nil, bottom: NSLayoutYAxisAnchor? = nil, right: NSLayoutXAxisAnchor? = nil) {

    anchorWithConstantsToTop(top: top, left: left, bottom: bottom, right: right, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0)

}

func anchorWithConstantsToTop(top: NSLayoutYAxisAnchor? = nil, left:     NSLayoutXAxisAnchor? = nil, bottom: NSLayoutYAxisAnchor? = nil, right: NSLayoutXAxisAnchor? = nil, topConstant: CGFloat = 0, leftConstant: CGFloat = 0, bottomConstant: CGFloat = 0, rightConstant: CGFloat = 0) {

    translatesAutoresizingMaskIntoConstraints = false

    if let top = top {
        topAnchor.constraint(equalTo: top, constant: topConstant).isActive = true
    }

    if let bottom = bottom {
        bottomAnchor.constraint(equalTo: bottom, constant: -bottomConstant).isActive = true
    }

    if let left = left {
        leftAnchor.constraint(equalTo: left, constant: leftConstant).isActive = true
    }

    if let right = right {
        rightAnchor.constraint(equalTo: right, constant: -rightConstant).isActive = true
    }
    }
}

0 个答案:

没有答案