单击UICollectionViewCell时创建新的视图控制器

时间:2017-07-14 16:36:42

标签: ios uicollectionview

我目前有一个带有单元格的UICollectionView表,我试图让每个创建的单元都有自己独特的视图控制器。例如,当点击UICollectionViewCell时,视图控制器会显示该特定单元格。我知道我可以创建一个viewcontroller并只对那个视图控制器执行segue。这仅涵盖一个单元格......如果用户创建了25个单元格...如何在不制作segue的情况下为每个单元格创建一个视图控制器?下面的代码是创建一个单元格。

// MARK: Create collection View cell with title, image, and rounded border

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

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ChatCell
    let object = objects[indexPath.row]

    cell.chatLabel.text = object.title ?? ""
    cell.chatImage.image = object.image
    if let chatImagePath = object.imagePath {
        if let imageURL = URL(string: chatImagePath) {
        cell.chatImage.sd_setImage(with: imageURL)
        }
    }
    cell.layer.borderWidth = 0.5
    cell.layer.borderColor = UIColor.darkGray.cgColor
    cell.layer.masksToBounds = true
    cell.layer.cornerRadius = 8

    return cell
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return objects.count
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let itemWidth = photoCollectionView.bounds.width
    let itemHeight = photoCollectionView.bounds.height / 2
    return CGSize(width: itemWidth, height: itemHeight)
}

1 个答案:

答案 0 :(得分:1)

在您提问的评论中,您澄清说您实际上只有一种基本类型的视图控制器正在转换,但您希望确保根据哪个单元格向其提供正确的信息你点击的集合视图。

有两种基本方法:

  1. 最简单的,在IB中,从集合视图单元格创建一个segue到故事板中的下一个场景,然后在原始场景中实现prepare(for:sender:),以便将您需要的任何内容传递给下一个场景。 / p>

    例如,您可能会prepare(for:sender:)执行以下操作:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let indexPath = collectionView?.indexPathsForSelectedItems?.first, let destination = segue.destination as? DetailsViewController {
            destination.object = objects[indexPath.item]
        }
    }
    

    现在,这做了大量假设(例如我的集合视图有一个数组,objects,我的目标视图控制器是DetailsViewController,它有一些object属性等等,但希望它说明了基本的想法。

  2. 你说你不想使用segue。我不确定为什么,但是,如果你真的不想要segue,那么只需使用工具collectionView(_:didSelectItemAt:)并以编程方式启动转换,无论你想要什么。