从另一个视图控制器直接将变量传递给UICollectionViewCell

时间:2017-08-06 09:44:38

标签: ios swift uicollectionview segue uicollectionviewcell

每当我转到UICollectionViewController时,我都试图将图像从视图控制器传递到UICollectionViewCell。通常,我只使用以下代码将变量直接传递给UICollectionViewController。

let myCollectionViewController = MyCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout())       
    myCollectionViewController.selectedImage = myImageView?.image         
    navigationController?.pushViewController(myCollectionViewController, animated: true)

但是,我已经将我的UICollectionViewCell子类化,并按如下方式设置了单元格:

import UIKit


class myCollectionViewCell: UICollectionViewCell {

let imageView:UIImageView = {

    let iv = UIImageView()
    iv.backgroundColor = .red
    iv.contentMode = .scaleAspectFill
    iv.clipsToBounds = true
    return iv
}()

var selectedImage: UIImage? {

    didSet {

        self.imageView.image = selectedImage
    }
}

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


}

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

如何在segue期间直接将我的图像直接传递给我的UICollectionViewCell子类?

1 个答案:

答案 0 :(得分:-1)

希望这可以帮助你 - :

 import Foundation
class HomeController: UIViewController{

// STORED VARIABLE FOR CollectionView

    lazy var CollectionView : UICollectionView = {
        var layout = UICollectionViewFlowLayout()
        layout.minimumLineSpacing = 0
        var collectionViews = UICollectionView(frame: .zero, collectionViewLayout: layout)
        collectionViews.translatesAutoresizingMaskIntoConstraints = false
        collectionViews.backgroundColor = UIColor.white
        collectionViews.showsHorizontalScrollIndicator = false
        collectionViews.showsVerticalScrollIndicator = false
        collectionViews.dataSource = self
        collectionViews.delegate = self

        return collectionViews
    }()

    // APPLY CONSTRAINTS FOR CollectionView

    func setUpCollectionView(){

        view.addSubview(CollectionView)
        CollectionView.register(HomeControllerCell.self, forCellWithReuseIdentifier: "cell")
        CollectionView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
        CollectionView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
        CollectionView.topAnchor.constraint(equalTo: view.topAnchor,constant:92).isActive = true
        CollectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor,constant:-50).isActive = true
}

    override func viewDidLoad() {
        super.viewDidLoad()
        setUpCollectionView()
    }


}

// EXTENSION FOR COLLECTION VIEW PARENT
extension HomeController:UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout{


    // NUMBER OF SECTION IN TABLE
    public func numberOfSections(in collectionView: UICollectionView) -> Int{
        return 1
    }
    // NUMBER OF ROWS IN PARENT SECTION
    public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int{
        return 5

    }
    // The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:

    public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell{
        let Cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! HomeControllerCell
    // PASS IMAGE (whatever you have) TO COMPUTED VARIABLE image
        Cell.image = pass image here
        return Cell
    }

    // SIZE FOR PARENT CELL COLLECTION VIEW
    public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize{
        return CGSize(width: view.frame.width, height: 220)
    }

}

<强> CollectionViewCellClass - :

 class HomeControllerCell: UICollectionViewCell {

    //INITIALIZER
    override init(frame: CGRect) {
        super.init(frame: frame)
        setUpview()

    }

// STORED VARIABLE imageVIEW

   let imageView:UIImageView = {

    let iv = UIImageView()
    iv.backgroundColor = .red
    iv.contentMode = .scaleAspectFill
    iv.translatesAutoresizingMaskIntoConstraints = false
    iv.clipsToBounds = true
    return iv
}()

// COMPUTED VARIABLE image

var image: UIImage? {

    didSet {

        self.imageView.image = image
    }
}
    // APPLY CONSTRAINTS FOR CELL VIEWS

    func setUpview(){

    // ADD imageView AS SUBVIEW

        addSubview(imageView)

    // APPLY CONSTRAINT ON IMAGE VIEW

        imageView.leftAnchor.constraint(equalTo: self.leftAnchor,constant:5).isActive = true
        //menuHeader.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
        imageView.topAnchor.constraint(equalTo: self.topAnchor,constant:12).isActive = true
        imageView.heightAnchor.constraint(equalToConstant: 50).isActive = true
        imageView.widthAnchor.constraint(equalToConstant: 50).isActive  = true
    }

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

}