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