indexPath.row始终返回零

时间:2015-09-26 12:32:11

标签: ios swift uicollectionview

我有两个集合视图,一个显示名称,另一个显示相应人员的年龄。这些数据以" [["名称","年龄"],["名称":&#34]的形式存储在字典数组中;丹尼尔","年龄" :" 20"],["姓名":"杰克","年龄":" 20"]]。此数据来自CSV文件,因此第一个元素是标题。在collectionView中查看cellForItemAtIndexPath,我检查集合视图并提供行号的数据,如cell [indexPath.row] [" Name"]和cell2 [indexPath.row] [" Age&# 34]。但是,indexPath.row总是返回零,所以我只得到标题 -

enter image description here

如何解决此问题?这是我的代码 -

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

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 1
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    if collectionView == self.nameCollectionView {
        let nameCell = collectionView.dequeueReusableCellWithReuseIdentifier("NameCell", forIndexPath: indexPath) as! NameCell

        nameCell.data.text = self.data?[indexPath.row]["Name"]
        println(indexPath.row)

        return nameCell
    }
    else{
        let ageCell = collectionView.dequeueReusableCellWithReuseIdentifier("AgeCell", forIndexPath: indexPath) as! AgeCell

        ageCell.data.text = self.data?[indexPath.row]["Age"]



        return ageCell
    }

}

3 个答案:

答案 0 :(得分:4)

与您的代码相同,您只将numberOfItemsInSection设置为1,那么您总是得到第0个索引。 make有动态值,例如return Array.count。

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return self.data.count  // here you need to set dynamic count of array
}

<强>更新

如果您关注numberOfSectionsInCollectionView,请将您的代码设为cellForRow

之后的代码
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    if collectionView == self.nameCollectionView {
        let nameCell = collectionView.dequeueReusableCellWithReuseIdentifier("NameCell", forIndexPath: indexPath) as! NameCell

        nameCell.data.text = self.data?[indexPath.section]["Name"]
        println(indexPath.section)

        return nameCell
    }
    else{
        let ageCell = collectionView.dequeueReusableCellWithReuseIdentifier("AgeCell", forIndexPath: indexPath) as! AgeCell

        ageCell.data.text = self.data?[indexPath.section]["Age"]



        return ageCell
    }

}

答案 1 :(得分:1)

IndexPath是具有以下结构的属性 Indexpath {Section, Row}。 因此,如果您希望数据位于两个不同的部分,其中包含一行,那么每个部分的indexpath.row将返回0,因为

对于节索引0 - Indexpath[0,0]表示节索引0和行索引0的索引路径

对于节索引1 - Indexpath[1,0]表示节索引1的索引路径和行索引0

希望可以让你明白。

答案 2 :(得分:0)

正如其他人所指出的那样,您告诉您的收藏视图,您在每个部分中始终有2个部分和1个项目。因此,集合视图将仅在每个部分中要求1个项目。因此,每个部分中只有一个项目(索引0)。

你说&#34;这些数据以表格形式存储在字典中......&#34;

是字典还是字典数组?字典是无序集合,因此不适合存储有序的项目集以供给集合视图或表视图。一系列词典 是合适的。根据您显示的数据和您的代码,您看起来有一系列字典。您应该编辑您的问题以明确这一点。

您的代码并没有多大意义。您有2个不同的集合视图,并且每个视图都显示不同的数据。您告诉您的集合视图您有2个部分但忽略部分编号并为这两个部分创建相同的数据。那里出了点问题。