2016-07-22 3 views
3

Я просмотрел множество примеров и попытался включить, но не увенчался успехом. В моем CollectionView (который был помещен в ViewController), я хотел бы выбрать ячейку и нажать изображение ячейки на другой ViewController. Изображения помещены в массив словарей. Я не уверен, как я должен отредактировать как мою подготовку, так и мою func collectionView ... didSelectItemAtIndexPath. Кроме того, любое подробное объяснение, связанное с вашим кодом, будет полезно, так как я все еще изучаю быстрый и синтаксический.Как передать/отобразить изображение из CollectionView в другой ViewController

Ниже то, что я думаю, что вся информация, необходимая, но, пожалуйста, дайте мне знать, если вам нужно больше:

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 
} 

ДОПОЛНИТЕЛЬНЫЕ КЛАСС: CollectionViewCell класс

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

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

ДОПОЛНИТЕЛЬНЫЕ КЛАСС: UIViewController

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

    var story: StoryImages? 

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

} 

ДОПОЛНИТЕЛЬНЫЙ КЛАСС: 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

Связано ли ваше соединение с 'UICollectionViewCell' или' ViewController'? –

+0

Откуда вы показываете новый viewController для отображения изображений ?????? –

+0

@Nirav My segue подключен к ViewController – Ojay

ответ

1

Первых передать indexPath из selectedItem в didSelectItemAtIndexPath

Теперь передать изображение в prepareForSegue методе как этого

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

объявляют один StoryImages типов объектов в вашем StoryView, где вы хотите передать изображение и использовать этот объект в viewDidLoad для назначения изображения

var selectedStory: StoryImages? 

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

Вы попробовали мое решение, пожалуйста, примите ответ, если он вам поможет. –

+0

Спасибо, Нира, похоже, ты рядом. Я просто получаю одну ошибку (Отсутствует аргумент для параметра dataDictionary в вызове): var selectedStory: StoryImages = StoryImages() – Ojay

+0

Можете ли вы показать мне замедление класса StoryImages, что было бы более полезным. –