我在我的应用中使用UICollectionView
,以便用户在几个城市和这些城市的餐馆之间进行选择。
首先,我将在城市中装载餐馆。
cities = RestaurantsLoader.cities()
然后我用它们填充UICollectionView
。
extension RestaurantPickerViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: 40, height: 40)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 1
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 1
}
}
然后显示它们(使用UILabel
,因为我还没有创建自定义单元格
extension RestaurantPickerViewController: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return cities[section].restaurants.count
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return cities.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "normalCell", for: indexPath)
cell.viewWithTag(123)?.removeFromSuperview()
let label = UILabel(frame: cell.bounds)
label.text = cities[indexPath.section].restaurants[indexPath.item].name
label.textAlignment = .center
label.tag = 123
cell.addSubview(label)
return cell
}
}
现在,我实现了didSelectItem
的{{1}}功能。
UICollectionView
但是,此indexPath几乎总是关闭。当我按下位于部分:1,项目:25的单元格时,它将打印部分:2,项目:0。我觉得这真的很奇怪,而且以前从未真正遇到过类似的事情。我究竟做错了什么?或者我该如何解决?
答案 0 :(得分:0)
您必须使用“ indexPath.item”