image - 如何在详细视图中显示来自数组的不同照片(来自集合视图)
问题描述
在研究并尝试了各种代码之后,我终于在 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)
} }
解决方案
所以我和朋友讨论了我的问题,他发现了以下问题:
1.) 我在 CollectionView 项目上放了一个按钮,它基本上将整个代码引导到另一个方向,因此该方法从未被调用。这在这里不可见。所以我从故事板和班级中删除了按钮。
2.)我还需要删除segue,并删除相应的代码行“performSegue(withIdentifier:“segueOpenDetail”,sender:self)”。
现在它起作用了!因此,我发布的代码应该作为每个想要就详细视图做类似主题的人的实现示例。希望有人可以从这里给出的输入中受益。
推荐阅读
- hyperledger-fabric - 超级账本结构 - 并发交易
- excel - Excel QueryTable 随着时间的推移变得越来越慢,直到它冻结
- javascript - 如何以正确的方式包含这个js
- python - 如何使用python生成随机跟踪?
- firebase - Firebase:如何使用 Cloud Functions shell 在本地运行“HTTPS 可调用函数”?
- php - 如何在浏览器中将可编辑的 PDF 显示为平面 PDF?
- amazon-web-services - AWS Glue:命令失败,错误代码为 1
- reactjs - shouldComponentUpdate() 返回 true 但 NavLink 仍然不起作用
- angular - 如何在 rxjs retryWhen 方法中使用角度服务
- solr - Solr edismax 查询解析器处理停用词