如何自定义UICollectionView Cell项的行为?

时间:2019-04-17 12:35:47

标签: ios swift uicollectionview

我正在学习Swift和iOS开发!

我决定使用UICollectionView构建一个小应用程序。

所以我的问题是如何自定义UICollectionView Cell的行为。

这是我要完成的工作:

enter image description here

我有两个数组:

"temps": [
    "Présent",
    "Passé composé",
    "Imparfait",
    "Plus-que-parfait",
    "Passé simple",
    "Passé antérieur",
    "Futur",
    "Futur antérieur",
    "Futur proche",
    "Présent",
    "Passé",
    "Passé - forme alternative",
    "Présent",
    "Imparfait",
    "Plus-que-parfait",
    "Passé",
    "Présent",
    "Présent",
    "Passé"
],

还有"list": [ "je suis", "tu es", "il est", "nous sommes", "vous êtes", "ils sont", "j'ai été", "tu as été", "il a été", "nous avons été", "vous avez été", "ils ont été", "j'étais",....]等...

temps数组正在按预期方式呈现,但列表未呈现。

相反,我得到了:

enter image description here

这是我的UICollectionView方法:

 func numberOfSections(in collectionView: UICollectionView) -> Int {

    return 1
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    var temps = [String]()

    if let temp = verb {
        temps = temp.temps

    }
    return temps.count
}

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let cell:IndicatifCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "indicatif", for: indexPath) as! IndicatifCollectionViewCell

    cell.temp.text = verb?.temps[indexPath.row]

    cell.je.text = verb?.list[indexPath.row]
    cell.tu.text = verb?.list[indexPath.row]
    cell.il.text = verb?.list[indexPath.row]
    cell.nous.text = verb?.list[indexPath.row]
    cell.vous.text = verb?.list[indexPath.row]
    cell.ils.text = verb?.list[indexPath.row]




    return cell


}

2 个答案:

答案 0 :(得分:2)

我相信您希望在此处将列表项与temp数组项一起使用:这些是您的lsuta nd temp数组:

"temps": [
          "Présent",
          "Passé composé",
          "Imparfait",
          "Plus-que-parfait",
          "Passé simple",
          "Passé antérieur",
          "Futur",
          "Futur antérieur",
          "Futur proche",
          "Présent",
          "Passé",
          "Passé - forme alternative",
          "Présent",
          "Imparfait",
          "Plus-que-parfait",
          "Passé",
          "Présent",
          "Présent",
          "Passé"
          ],
"list": [
             "je suis",
             "tu es",
             "il est",
             "nous sommes",
             "vous êtes",
             "ils sont",
             "j'ai été",
             "tu as été",
             "il a été",
             "nous avons été",
             "vous avez été",
             "ils ont été",
             "j'étais",....
         ]

您希望这些数据在一个单元格内彼此平行。我将使结构类似:

"finalDictionary": {
    "Présent" : [
                 "je suis",
                 "tu es",
                 "il est",
                 "nous sommes",
                 "vous êtes",
                 "ils sont",
    ],
    "Passé composé" : [
                       "tu as été",
                       "il a été",
                       "nous avons été",
                       "vous avez été",
                       "ils ont été",
                       "j'étais"
    ]
    "Imparfait": [
                  "ils sont",
                  "j'ai été",
                  "tu as été",
                  "il a été",
                  "nous avons été",
    ]
    ...
    ..
    .
}

现在当然要在您的numberOfItemsInSection中返回finalDictionary.allkeys().count,并在cellForItemAtIndexPath中将值设置为:

if let key:String = finalDictionary()[indexPath.row] {
    cell.temp.text = key
    cell.je.text = finalDictionary[key][0]
    cell.tu.text = finalDictionary[key][1]
    cell.il.text = finalDictionary[key][2]
    cell.nous.text = finalDictionary[key][3]
    cell.vous.text = finalDictionary[key][4]
    cell.ils.text = finalDictionary[key][6]
}

答案 1 :(得分:0)

我做错了,最简单的方法是使用switch语句:

switch indexPath {

    case [0, 0]:

        cell.temp.text = temps[0]

        cell.je.text = lists[0]
        cell.tu.text = lists[1]
        cell.il.text = lists[2]
        cell.nous.text = lists[3]
        cell.vous.text = lists[4]
        cell.ils.text = lists[5]
    default:
        print("...")
    }

等等。