gpt4 book ai didi

ios - 在自定义 UICollectionView 类中实现时未正确调用数据源方法

转载 作者:行者123 更新时间:2023-11-28 16:17:46 26 4
gpt4 key购买 nike

场景 - 我必须以编程方式创建一个自定义 UICollectionView 类,它必须显示在我想要的任何位置。

代码到现在 -

用于自定义 UICollectionView

 class ABSegmentView: UICollectionView,UICollectionViewDelegateFlowLayout,UICollectionViewDataSource {

var segmentProperties=segmentControlProperties()//segmentControlProperties is a modal class having relevant details regarding about population of collection view.
override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
super.init(frame: frame, collectionViewLayout: layout)
self.dataSource = self
self.delegate = self
self.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "cellIdentifier")

}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int{
return 1
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
print(segmentProperties.titleArray)
return segmentProperties.titleArray.count//data properly being received over here
}

//not getting called
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

let cell = self.dequeueReusableCellWithReuseIdentifier("cellIdentifier", forIndexPath: indexPath)
cell.backgroundColor = UIColor.redColor()
return cell
}


func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize{
return CGSizeMake(self.segmentProperties.segmentHeight, self.segmentProperties.segmentWidth)
}




}

在某处添加此 Collection View 的代码 -

let segment = ABSegmentView(frame: CGRectMake(0, 0, 200, 200), collectionViewLayout: UICollectionViewLayout())
segment.segmentProperties.segmentWidth = 60
segment.segmentProperties.segmentHeight = 50
segment.segmentProperties.titleArray = ["heyy","heyy","heyy","heyy","heyy","heyy"]
self.view.addSubview(segment)

所以添加的只是一个空的 Collection View 。

找到原因 -

调试时我发现我的数据源方法 cellForItemAtIndexPath() & func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) 没有得到打电话。

问题 - 我不确定我为所需场景所做的事情是否正确实现。如果我在某处遗漏了什么或可能是我的错误,请修改我。

编辑:回答-感谢桑托什的回答。我发现我误解了 collectionViewLayout 的概念。

调查结果 -

  • 我必须为 Collection View 设置一个合适的流布局作为具有正确间距和其他值的适当流布局相当对于正确放置 Collection View 至关重要。

    CollectionView Flow layout 是 Collection View (即 GridView )的 UI。

    StackOverflow 中有很多问题涉及到由于 collectionViewFlowLayout 放置不当导致数据源方法未被调用。

引用资料,除了已接受的答案外,对我有用 -

https://stackoverflow.com/a/14681999/5395919

其他人可能遇到此类问题的情况 -

-当我们将单元格大小设置为比我们的 Collection View 大得多时。

-当我们的单元格布局尺寸太大或 Collection View 未正确容纳时。

最佳答案

您正在使用 UICollectionViewLayout 实例化带有 layout 的自定义 collectionView。尝试使用 UICollectionViewFlowLayout。下面的代码可能对您有所帮助,如果可行请告诉我:

let layout = UICollectionViewFlowLayout()
layout.minimumInteritemSpacing = 20//you can change this value
layout.scrollDirection = .Vertical//or may be .Horizontal

let segment = ABSegmentView(frame: CGRectMake(0, 0, 200, 200), collectionViewLayout: layout)
segment.segmentProperties.segmentWidth = 60
segment.segmentProperties.segmentHeight = 50
segment.segmentProperties.titleArray = ["heyy","heyy","heyy","heyy","heyy","heyy"]
self.view.addSubview(segment)
segment.reloadData()

关于ios - 在自定义 UICollectionView 类中实现时未正确调用数据源方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38898429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com