2016-07-22 38 views
3

Ich habe viele Beispiele nachgeschlagen und versucht zu integrieren, war aber nicht erfolgreich. In meiner CollectionView (die in einem ViewController platziert wurde) möchte ich eine Zelle auswählen und das Zellbild auf einen anderen ViewController schieben. Die Bilder wurden in ein Array von Wörterbüchern platziert. Ich bin nicht sicher, wie ich meine prepareForSegue oder meine func collectionView ... didSelectItemAtIndexPath bearbeiten sollte. Auch jede detaillierte Erklärung, die mit Ihrem Code einhergeht, wird hilfreich sein, da ich immer noch schnell und seine Syntax lerne.Wie man ein Bild von CollectionView auf einen anderen ViewController überträgt/anzeigt

Unten ist das, was ich denke, die alle Informationen, die Sie brauchen, aber lassen Sie es mich wissen, wenn Sie mehr benötigen:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if (segue.identifier == "ShowToStory") { 
     var story = sender as! UICollectionViewCell, indexPath = collectionView.indexPathForCell(story) 

    } 
} 

private func initStoryImages() { 

    var storyArchives = [StoryImages]() 
    let inputFile = NSBundle.mainBundle().pathForResource("StoryArchive", ofType: "plist") 

    let inputDataArray = NSArray(contentsOfFile: inputFile!) 

    for inputItem in inputDataArray as! [Dictionary<String, String>] { 

     let storyImage = StoryImages(dataDictionary: inputItem) 
     storyArchives.append(storyImage)  
} 
     storyImages = storyArchives 
} 

ZUSÄTZLICHE KLASSE: CollectionViewCell Klasse

class CollectionViewCell: UICollectionViewCell { 
@IBOutlet weak var cellImage: UIImageView! 

func setStoryImage(item:StoryImages){ 
cellImage.image = UIImage(named:item.itemImage) 
} 
} 

ZUSÄTZLICHE KLASSE: UIViewController

class StoryView: UIViewController{ 
@IBOutlet weak var ImageToStory: UIImageView! 

    var story: StoryImages? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    ImageToStory.image = UIImage(named: (story?.itemImage)!) 
} 

} 

ZUSÄTZLICHE KLASSE: StoryImages

class StoryImages{ 

var itemImage: String 


init(dataDictionary:Dictionary <String,String>) { 
itemImage = dataDictionary["ItemImage"]! 
} 

class func newStoryImage(dataDictionary:Dictionary<String,String>) -> StoryImages { 
return StoryImages(dataDictionary: dataDictionary) 
    } 
} 
} 
+1

Ist Ihr Segment mit 'UICollectionViewCell' oder' ViewController' verbunden? –

+0

Woher zeigen Sie den neuen viewController, um Bilder anzuzeigen ?????? –

+0

@Nirav Mein Segment ist mit dem ViewController verbunden – Ojay

Antwort

1

zuerst die indexPath von selectedItem in didSelectItemAtIndexPath

Jetzt passieren das Bild in prepareForSegue Verfahren wie dieses

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if (segue.identifier == "ShowToStory") { 
     let cell = sender as! UICollectionViewCell //Change UICollectionViewCell with CustomCell name if you are using CustomCell 
     let indexPath = self.collectionView?.indexPathForCell(cell) 
     let story = storyImages[indexPath.row] 
     let destVC = segue.destinationViewController as! StoryView 
     destVC.selectedStory = story 
    } 
} 

Jetzt erklären ein StoryImages Objekttypen in Ihrem StoryView passieren, wo Sie Bild übergeben möchten und verwenden Sie dieses Objekt in viewDidLoad, um Bild zuzuweisen

var selectedStory: StoryImages? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    ImageToStory.image = selectedStory.itemImage // or use NSData if it contain url string 
} 
+0

Haben Sie meine Lösung versucht, bitte akzeptieren Sie die Antwort, wenn es Ihnen hilft. –

+0

Danke Nirav, es scheint als wärst du nah dran. Ich bekomme nur einen Fehler (Missing Argument für Parameter 'DataDictionary' im Aufruf) auf der: var selectedStory: StoryImages = StoryImages() – Ojay

+0

Können Sie mir die Verlangsamung der 'StoryImages' Klasse zeigen, das wäre hilfreicher. –