2017-12-12 18 views
0

UIImageに画像をアップロードしていて、コレクションビューのセルに保存しています。今私は、コレクションビューで画像をクリックし、Segueを通して別のViewControllerに画像を渡したいと思います。誰もが..コレクションビューCell Swiftから別のビューコントローラに画像を渡す

import UIKit 

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UICollectionViewDataSource,UICollectionViewDelegate { 

    @IBOutlet weak var myImageView: UIImageView! 
    var Photos = [UIImage]() 

    @IBOutlet weak var ucvMyCollectionView: UICollectionView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     ucvMyCollectionView.dataSource = self 
     ucvMyCollectionView.delegate = self 
     let nib = UINib(nibName: "myCollectionViewCell", bundle: nil) 
     ucvMyCollectionView.register(nib, forCellWithReuseIdentifier: "myCollectionViewCell") 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func selectPhotoButtonTapped(_ sender: Any) { 
     let myPickerController = UIImagePickerController() 
     myPickerController.delegate = self; 
     myPickerController.sourceType = UIImagePickerControllerSourceType.photoLibrary 

     self.present(myPickerController, animated: true, completion: nil) 
    } 
    internal func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 

    { 
     //myImageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage 
     let newImage = info[UIImagePickerControllerOriginalImage] as! UIImage 
     Photos.append(newImage) 
     NSLog("%d",Photos.count) 
     ucvMyCollectionView.reloadData() 
     self.dismiss(animated: true, completion: nil) 

    } 
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return Photos.count 
    } 
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "myCollectionViewCell", for: indexPath as IndexPath) as! myCollectionViewCell 
     NSLog("ImageCount %d",Photos.count) 
     cell.imgCollectionView.image = Photos[indexPath.row] 

     return cell 
    } 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
     return CGSize(width: 200, height: 200) 
    } 


} 
+0

セルを 'didSelectRow'デリゲートメソッドで取得し、セルからイメージを取得して次のビューコントローラに渡します。 –

答えて

1

UICollectionViewDelegateは、オプションのメソッドの実装func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)を持って助けてくださいすることができます。 collectionViewのセルの1つがユーザーによって選択(タップ)されると、このメソッドが呼び出されます。代理人を設定するのを忘れないでくださいyourCollectionView.delegate = self

このメソッド内でコードを処理する必要があります。

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    // This gives you the selected cell 
    let selectedCell = collectionView.cellForItem(at: indexPath) 
    // 
    // cast it to your cell type 
    let cellInYourType = selectedCell as! YourCollectionViewCellType 
    // 
    // get your image 
    let image = cellInYourType.imgCollectionView.image 
    // 
    // Create your viewController instance 
    let yourVC = YourViewController(); 
    // 
    // your data is passed like this 
    yourVC.image = image; 
    self.present(yourVC, animated: true, completion: nil) 
} 

ViewControllerがStoryboardで設定されている場合は、この方法で画像を初期化して設定できます。

let yourViewController = UIStoryBoard(name: "storyboardname", bundle: nil).instantiateViewController(withIdentifier: "ViewControllerID") as! YourViewController 
yourViewController.image = theImage; 
self.present(yourViewController, animated: true, completion: nil) 
関連する問題