2016-12-11 7 views
0

Ich erstelle eine UICollectionView. Der Benutzer wählt ein Bild aus UIImagePicker, und dann speichere ich das Bild in das DocumentDirectory, aber jetzt möchte ich das Bild der UICollectionView hinzufügen. Wie kann ich auf das Dokumentverzeichnis im DetailViewController zugreifen und es dem Array im UICollectionView-Controller hinzufügen?Bild an Array von DocumentDirectory anhängen

DetailViewController (Wo erhalte ich und speichern Sie das Bild):

import UIKit 

class DetailViewController: UIViewController, UITextFieldDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate { 

... 

@IBAction func takePicture(sender: UIBarButtonItem) { 

    let imagePicker = UIImagePickerController() 

    if UIImagePickerController.isSourceTypeAvailable(.Camera) { 
     imagePicker.sourceType = .Camera 
    } else { 
     imagePicker.sourceType = .PhotoLibrary 
    } 
    imagePicker.delegate = self 

    presentViewController(imagePicker, animated: true, completion: nil) 
} 

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: AnyObject]) { 

    let img = info[UIImagePickerControllerOriginalImage] as! UIImage 
    let data = UIImagePNGRepresentation(img) 
    NSUserDefaults.standardUserDefaults().setObject(data, forKey: "myImageKey") 
    NSUserDefaults.standardUserDefaults().synchronize() 

    imageView.image = img 

    dismissViewControllerAnimated(true, completion: nil) 
} 

... 

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    let key = item.itemKey 

    if let imgData = NSUserDefaults.standardUserDefaults().objectForKey("myImageKey") as? NSData { 
     imageView.image = UIImage(data: imgData) 
    } 
    //imageView.image = UIImage(data: imgData) 
} 

... 

UICollectionView:

import UIKit 

class PhotosViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { 

var collectionView: UICollectionView! 
var imageStore: ImageStore! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout() 
    layout.sectionInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10) 
    layout.itemSize = CGSize(width: 300, height: 490) 

    collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout) 
    collectionView.dataSource = self 
    collectionView.delegate = self 
    collectionView!.registerClass(FoodCell.self, forCellWithReuseIdentifier: "Cell") 
    collectionView.backgroundColor = UIColor.whiteColor() 
    self.view.addSubview(collectionView) 
} 

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
} 

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return images.count 
} 

var images: [UIImage] = [ 

] 

images.append(UIImage(named: "")!) 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! FoodCell 
    cell.textLabel.text = "" 
    cell.imageView.image = images[indexPath.row] 
    return cell 
} 

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 
{ 
    print("User tapped on item \(indexPath.row)") 
} 


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

Antwort

0

Sie delegate Mechanismus verwenden, könnte das aufgenommene Bild von DetailVC zum PhotosViewController passieren. Wenn Sie neu zu delegieren sind hier eine grobe Umsetzung.

+0

Dies funktionierte nicht, da der PhotosViewController zu diesem Zeitpunkt von ViewController erbt und keinen Pfad zum DetailViewController hat. Wie sollte ich diesen Pfad einrichten, damit dies funktioniert? – Allie