2016-12-11 10 views
0

Я создаю UICollectionView. Пользователь выбирает изображение из UIImagePicker, а затем я сохраняю изображение в DocumentDirectory, но теперь хочу добавить изображение в UICollectionView. Как получить доступ к каталогу документа в DetailViewController и добавить его в массив в контроллере UICollectionView?Добавление изображения в массив из DocumentDirectory

DetailViewController (Где получить и сохранить изображение):

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. 
    } 
} 

ответ

0

Вы можете использовать delegate механизм для передачи принимаемого изображения от DetailVC к PhotosViewController. Если вы новичок в делегировании здесь, это грубая реализация.

protocol DetailViewControllerDelegate{ 
    func didPickImage(image:UIImage) 
} 

class DetailViewController: UIViewController{ 
    var delegate: DetailViewControllerDelegate? 
} 

class PhotosViewController:DetailViewControllerDelegate{ 

    func didPickImage(image:UIImage){ 
     imagesArray.append(image) 
     collectionView.reloadData() 
    } 
} 


//not sure how you are navigating to DetailVC from PhotosVC 
// before doing that set the delegate like 

detailVC.delegate = self 
+0

Это не сработало, потому что на данный момент PhotosViewController наследуется от ViewController и не имеет никакого пути к DetailViewController. Как мне установить этот путь, чтобы это работало? – Allie