从UICollectionView Swift 3在单独的View Controller中查看图像

时间:2017-01-18 05:32:18

标签: ios swift xcode uicollectionview

所以我正在创建一个UiCollectionView。您可以在集合视图中滚动浏览图像数组,每当您点击其中一个图像时,它将进入一个单独的视图控制器并显示您从UICollectionView中点击的图像。我已经看过教程并一步一步地进行,但我不知道我做错了什么。我可以查看集合视图并滚动它但是只要我点击其中一个图像就不会进入单独的视图控制器。我检查了我的课程和标识符。我认为他们都是正确的。

collectionView是一个名为collectionView

的出口

UIimage中的collectionViewCell是名为

的出口

collectionViewCell标识符为“Cell”

collectionViewCell班级为OurCell

保存图片的viewController称为secondViewController

以下是ViewController类文件的代码:

@IBOutlet weak var collectionView: UICollectionView!

let imageArray = [UIImage(named: "EliHouse1" ), UIImage(named: "EliHouse2"), UIImage(named: "EliHouse3" ), UIImage(named: "iPod" )]

func numberOfSections(in collectionView: UICollectionView) -> Int {

    return 1

}


func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {



    return self.imageArray.count


}


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! OurCell


    cell.ourImage?.image = self.imageArray[indexPath.row]



    return cell

}




func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    if segue.identifier == "showImage"
    {
        let indexPaths = self.collectionView!.indexPathsForSelectedItems!
        let indexPath = indexPaths[0] as NSIndexPath
        let vc = segue.destination as! SecondViewController
        vc.image = self.imageArray[indexPath.row]!

    }
}

以下是OurCell类文件

的代码
@IBOutlet weak var ourImage: UIImageView!

以下是SecondViewController类文件

的代码
@IBOutlet weak var imageView: UIImageView!
var image = UIImage()

override func viewDidLoad() {
    super.viewDidLoad()


    self.imageView.image = self.image

    // Do any additional setup after loading the view.
}

我在代码中运行它,我可以查看和滚动单元格,但每当我点击图像时,它都不会将我带到SecondViewController并且没有任何反应。有人有什么想法吗?我究竟做错了什么?

1 个答案:

答案 0 :(得分:0)

在你的collectionView类中,你应该添加如下内容:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let identifier = "showImage"
    if segue.identifier == identifier {
        let indexPath = collectionView.indexPathsForSelectedItems
        if let indexPath = indexPath?.first,
            let cell = collectionView(rssCollectionView, cellForItemAt: indexPath) as? OurCell,
            let image = cell.ourImage (or something like this to retrieve the picture) {
            let showImage = segue.destination as? SecondViewController
            showImage?.image = image
        }
    }

此外,在故事板中,您需要命令+将collectionView单元格拖动到另一个您的第二个ViewController并选择具有所需类型的segue,然后选择segue行并在标识符文本字段中添加“showImage”。