首页 > 解决方案 > 如何在详细视图中显示来自数组的不同照片(来自集合视图)

问题描述

在研究并尝试了各种代码之后,我终于在 Stack Exchange ( Link ) 上找到了一个帖子,这似乎帮助我实现了我的目标拥有一个包含 24 个项目(带有标签和图像的单元格)的 UICollectionView 以及当用户点击一个项目,一个特定的图像将显示在一个详细视图上(> 详细视图 = UIViewController 以模态方式呈现一个 segue。此时没有嵌入式 NavigationController,因为我不想要一个 NavBar)。

我根据我的情况调整了上述链接中的解决方案(当然不确定我是否做对了)。我没有收到任何与代码相关的错误。UICollectionView 加载,我可以点击一个项目并打开详细信息视图,但图像未显示在详细信息屏幕上。当我在覆盖函数处设置断点时... didSelectItemAt我意识到代码甚至没有被调用。

我已经尝试了两天来上班。我也尝试了各种替代选项,但由于我是 Swift 的初学者以及一般的开发,我就是想不通。

我错过了什么?

这是我的 ViewController 代码 (是的,可能有更好的方法来加载 doorImage 数组,但它可以工作,所以没关系)

class ViewController: UICollectionViewController {

let doorTitle = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"]

let doorImage = [UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "xmasballcut"),
                 UIImage(named: "reddecocut"),]

override func viewDidLoad() {
    super.viewDidLoad()
   self.collectionView.delegate = self
   self.collectionView.dataSource = self
}

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

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCellDoor", for: indexPath) as! CollectionViewCellDoor
    cell.doorTitleLabel.text = doorTitle[indexPath.item]
    cell.doorImageView.image = doorImage[indexPath.item]
    return cell
 }

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let vc = self.storyboard?.instantiateViewController(withIdentifier: "DetailViewController") as! DetailViewController
    switch indexPath.item
    {
    case 0:
        vc.selectedImage = UIImage.init(named: "detail1")!
        performSegue(withIdentifier: "segueOpenDetail", sender: self)
        break;
    case 1:
        vc.selectedImage = UIImage.init(named: "detail2")!
        performSegue(withIdentifier: "segueOpenDetail", sender: self)
        break;
    case 2:
        vc.selectedImage = UIImage.init(named: "detail3")!
        performSegue(withIdentifier: "segueOpenDetail", sender: self)
        break;
    default:
        vc.selectedImage = UIImage.init(named: "detail1")!
        performSegue(withIdentifier: "segueOpenDetail", sender: self)
        break;
    } }
}  

这是我的 DetailViewController 代码

class DetailViewController: UIViewController {

@IBOutlet weak var detailImage: UIImageView!
@IBOutlet weak var closeButton: UIButton!

var selectedImage: UIImage! = nil

override func viewDidLoad() {
    super.viewDidLoad()
    self.detailImage.image = selectedImage
}


@IBAction func dismissModalView(_ sender: UIButton) {
    dismiss(animated: true, completion: nil)
}  }

标签: imageuiviewcontrolleruicollectionviewswift4

解决方案


所以我和朋友讨论了我的问题,他发现了以下问题:

1.) 我在 CollectionView 项目上放了一个按钮,它基本上将整个代码引导到另一个方向,因此该方法从未被调用。这在这里不可见。所以我从故事板和班级中删除了按钮。

2.)我还需要删除segue,并删除相应的代码行“performSegue(withIdentifier:“segueOpenDetail”,sender:self)”。

现在它起作用了!因此,我发布的代码应该作为每个想要就详细视图做类似主题的人的实现示例。希望有人可以从这里给出的输入中受益。


推荐阅读