大佬教程收集整理的这篇文章主要介绍了ios – 如何在swift中创建可扩展的集合视图?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有2个集合视图部分,当第一次加载此VC时,两个部分(室内和室外)最初将只显示3个项目.
但是在用户按下“更多”按钮后,室内或室外的每个部分都会展开并显示所有可用项目,如下图所示
我试图制作代码,但有时它似乎可以扩展,有时它不会扩展(仍显示3项).
这是主控制器中的代码:
class FacilitiesVC: UIViewController { @IBOutlet weak var collectionView: UICollectionView! var facilitiesCategoryData = [[String:Any]]() var outdoorFacilitiesIsExpanded = false var indoorFacilitiesIsExpanded = false override func viewDidLoad() { super.viewDidLoad() geTindoorOutdoorFacilitiesData() } } extension FacilitiesVC { // MARK: - Helper Methods func geTindoorOutdoorFacilitiesData() { let facilitiesData = FacilitiesCategoryLibrary.fetchFacilitiesCategory() var indoorFacilities = [FacilitiesCategory]() var outdoorFacilities = [FacilitiesCategory]() // disTinguishing between indoor and outdoor data for facData in facilitiesData { if facData.type == "Indoor Facility" { indoorFacilities.append(facData) } else { outdoorFacilities.append(facData) } } facilitiesCategoryData = [ ["title": "Indoor Facilities","info": indoorFacilities],["title": "Outdoor Facilities","info": outdoorFacilities] ] } } extension FacilitiesVC: UICollectionViewDatasource { // MARK: - UICollectionViewDatasource func numberOfSections(in collectionView: UICollectionView) -> Int { return facilitiesCategoryData.count } func collectionView(_ collectionView: UICollectionView,numberOfItemsInSection section: int) -> Int { if section == 0 { if indoorFacilitiesIsExpanded { let category = facilitiesCategoryData[section] let infoList = categorY["info"] as! [FacilitiesCategory] return infoList.count } else { return 3 } } else { if outdoorFacilitiesIsExpanded { let category = facilitiesCategoryData[section] let infoList = categorY["info"] as! [FacilitiesCategory] return infoList.count } else { return 3 } } } func collectionView(_ collectionView: UICollectionView,cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReusEIDentifier: StoryBoard.facilitiesCategoryCellIdentifier,for: indexPath) as! FacilitiesCell let category = facilitiesCategoryData[indexPath.section] let infoList = categorY["info"] as! [FacilitiesCategory] cell.facilitiesCategoryData = infoList[indexPath.item] return cell } // for section header view func collectionView(_ collectionView: UICollectionView,viewForSupplementaryElementOfKind kind: String,at indexPath: IndexPath) -> UICollectionReusableView { let sectionHeaderView = collectionView.dequeueReusableSupplementaryView(ofKind: kind,withReusEIDentifier: StoryBoard.facilitiesSectionHeaderIdentifier,for: indexPath) as! FacilitiesSectionHeader let category = facilitiesCategoryData[indexPath.section] sectionHeaderView.categoryData = category sectionHeaderView.sectionHeaderDelegate = self return sectionHeaderView } } extension FacilitiesVC: FacilitiesSectionHeaderDelegate { func didPressButton(_ facilities: String,isExpanded: Bool) { if facilities == "Indoor Facilities" { indoorFacilitiesIsExpanded = isExpanded } else if facilities == "Outdoor Facilities" { outdoorFacilitiesIsExpanded = isExpanded } collectionView.reloadData() } }
import UIKit protocol FacilitiesSectionHeaderDelegate: class { func didPressButton(_ facilities: String,isExpanded: Bool) } class FacilitiesSectionHeader: UICollectionReusableView { @IBOutlet weak var titleLabel: UILabel! weak var sectionHeaderDelegate: FacilitiesSectionHeaderDelegate? var collectionIsExpanded = false var facilitiesType = "" var categoryData: [String:Any]! { didSet { titleLabel.text = categoryData["title"] as? String facilitiestype = categoryData["title"] as! String } } @IBACtion func moreButtonDidPressed(_ sender: Any) { collectionIsExpanded = !collectionIsExpanded sectionHeaderDelegate?.didPressButton(facilitiesType,isExpanded: collectionIsExpanded) } }
也许我在这行代码中收集numberOfItemsInSection中的错误
func collectionView(_ collectionView: UICollectionView,numberOfItemsInSection section: int) -> Int { if section == 0 { if indoorFacilitiesIsExpanded { let category = facilitiesCategoryData[section] let infoList = categorY["info"] as! [FacilitiesCategory] return infoList.count } else { return 3 } } else { if outdoorFacilitiesIsExpanded { let category = facilitiesCategoryData[section] let infoList = categorY["info"] as! [FacilitiesCategory] return infoList.count } else { return 3 } } }
我认为该section参数与indexPath.section相同,但似乎有所不同,但我不知道如何从collection numberOfItemsInSection方法访问indexPath.section
怎么解决这个问题?
func collectionView(_ collectionView: UICollectionView,at indexPath: IndexPath) -> UICollectionReusableView { let sectionHeaderView = collectionView.dequeueReusableSupplementaryView(ofKind: kind,for: indexPath) as! FacilitiesSectionHeader let category = facilitiesCategoryData[indexPath.section] sectionHeaderView.categoryData = category sectionHeaderView.sectionHeaderDelegate = self if(indexPath.section == 0) { sectionHeaderView.collectionIsExpanded = indoorFacilitiesIsExpanded } else { sectionHeaderView.collectionIsExpanded = outdoorFacilitiesIsExpanded } return sectionHeaderView }
在FacilitiesSectionHeader内部,你可以根据它进行翻转
@IBACtion func moreButtonDidPressed(_ sender: Any) { collectionIsExpanded = !collectionIsExpanded sectionHeaderDelegate?.didPressButton(facilitiesType,isExpanded: collectionIsExpanded) }
以上是大佬教程为你收集整理的ios – 如何在swift中创建可扩展的集合视图?全部内容,希望文章能够帮你解决ios – 如何在swift中创建可扩展的集合视图?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。