我正在尝试做一个应用程序,当你点击collectionview单元格上的按钮,你可以显示详细的viewcontroller,并提供更多关于你的选择的信息。但我的结构体的所有属性在其他viewController上显示为nil。
这是我的视图控制器,包括集合视图
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
var ilceDizisi = [Ilceler]()
var secim : Ilceler?
override func viewDidLoad() {
super.viewDidLoad()
collectionView.delegate = self
collectionView.dataSource = self
let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white, NSAttributedString.Key.font:UIFont(name: "Papyrus", size: 25.0)]
navigationController?.navigationBar.titleTextAttributes = textAttributes as [NSAttributedString.Key : Any]
//Hucre Boyurlandirmasi
let tasarim = UICollectionViewFlowLayout()
let genislik = self.collectionView.frame.size.width
tasarim.minimumInteritemSpacing = 5
tasarim.minimumLineSpacing = 5
tasarim.sectionInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
tasarim.itemSize = CGSize(width: (genislik - 30) / 2, height: 322.0)
collectionView.collectionViewLayout = tasarim
ilceDizisi = [Ilceler.adalar, Ilceler.arnavutkoy, Ilceler.atasehir, Ilceler.avcilar, Ilceler.bagciler, Ilceler.bahcelievler, Ilceler.bakirkoy, Ilceler.basaksehir, Ilceler.bayrampasa, Ilceler.besiktas, Ilceler.beykoz, Ilceler.beylikduzu , Ilceler.beyoglu, Ilceler.buyukcekmece, Ilceler.catalca , Ilceler.cekmekoy , Ilceler.esenler , Ilceler.esenyurt , Ilceler.eyupsultan , Ilceler.fatih , Ilceler.gaziosmanpasa , Ilceler.gungoren , Ilceler.kadikoy , Ilceler.kagithane , Ilceler.kartal, Ilceler.kucukcekmece , Ilceler.maltepe , Ilceler.pendik , Ilceler.sancaktepe , Ilceler.sariyer , Ilceler.sile , Ilceler.sultanbeyli , Ilceler.sultangazi , Ilceler.sile, Ilceler.sisli , Ilceler.tuzla , Ilceler.umraniye , Ilceler.uskudar , Ilceler.zeytinburnu]
}
}
extension ViewController : UICollectionViewDelegate , UICollectionViewDataSource, CellButton {
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return ilceDizisi.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "hucre", for: indexPath) as! Cell
cell.isimLabel.text = ilceDizisi[indexPath.row].isim!
cell.yakaLabel.text = ilceDizisi[indexPath.row].yaka!
cell.ilceGorsel.image = UIImage(named: ilceDizisi[indexPath.row].gorsel!)
cell.prot = self
cell.indexPath = indexPath
return cell
}
func detail(indexPath: IndexPath) {
performSegue(withIdentifier: "toDetailVC", sender: nil)
secim = ilceDizisi[indexPath.row]
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toDetailVC" {
let destVC = segue.destination as! DetailViewController
destVC.secilenIlce = secim
}
}
}
这是我的详细视图Controller
import UIKit
class DetailViewController: UIViewController {
@IBOutlet weak var baskan: UILabel!
@IBOutlet weak var yuz: UILabel!
@IBOutlet weak var nufus: UILabel!
@IBOutlet weak var yaka: UILabel!
@IBOutlet weak var gorselView: UIImageView!
@IBOutlet weak var ilceLabel: UILabel!
var secilenIlce : Ilceler?
override func viewDidLoad() {
super.viewDidLoad()
baskan.text = "Belediye Başkanı : \(secilenIlce?.belediyeBaskani)"
yuz.text = "Yüzölçümü(km²) : \(secilenIlce?.yuzolcumu)"
nufus.text = "Nüfus : \(secilenIlce?.nufus)"
yaka.text = "Bulunduğu Yaka : \(secilenIlce?.yaka)"
gorselView.image = UIImage(named: (secilenIlce?.gorsel)!)
ilceLabel.text = secilenIlce?.isim
}
}
我想看到这样的信息
但当我开始这个项目时
我试图用prepareforsegue函数获取所有信息。实际上我需要删除imageview。图像代码,因为它返回nil,如果我解开它,我的项目会崩溃。我的错是什么,我如何修复它
1条答案
按热度按时间arknldoa1#
您需要在执行该步骤之前设置
secim
。请交换detail
函数中的两行。在原始代码中,您调用
performSeque
,这将导致调用prepare
。但此时您尚未设置secim
。因此,您在调用prepare
后设置secim
。最有可能的是,如果您再次点击单元格,它将显示之前点击的单元格的数据。