2017-08-06 4 views
0

J'essaie de transmettre une image d'un contrôleur de vue à une UICollectionViewCell chaque fois que je me connecte à UICollectionViewController. Normalement, je voudrais juste utiliser le code suivant pour passer la variable directement à UICollectionViewController.Transmettre la variable directement à UICollectionViewCell à partir d'un autre contrôleur de vue

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

Cependant, j'ai mon UICollectionViewCell et sous-classé ont mis en place la cellule comme suit:

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") 
} 
} 

Comment puis-je passer directement mon image directement à mon sous-classe UICollectionViewCell pendant la Segue?

+2

Vous ne pouvez pas passer une image directement à une cellule dans la Segue; la cellule n'existe pas encore. Vous pouvez passer la valeur au contrôleur de vue et il peut l'utiliser quand il crée la cellule – Paulw11

+0

Donc, je dois initialiser l'imageView dans myCollectionViewController plutôt que de l'initialiser dans la cellule sous-classée? – Tom

+0

vous pouvez le faire à partir de la méthode cellForRowAt de la vue de collection. –

Répondre

-1

Hope this helps vous-:

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") 
    } 

} 
+0

Down électeur s'il vous plaît donner une raison. –

+0

Je n'ai pas voté, mais peut-être parce que votre réponse n'explique * rien. Bien sûr, il s'agit d'un code (avec au moins une erreur, d'ailleurs), mais il semble être seulement vaguement lié à la question. – DonMag

+0

@DonMag laissez-moi savoir mon erreur ci-dessus qui serait très utile merci. –