cell变量为nil,其中value设置为collectionview index path

时间:2017-01-17 10:34:20

标签: ios swift swift2

我花了很多时间..但我无法弄清楚为什么它不工作..索引路径的单元格调用并正确设置值但是单元格类我找到了零值...如果您需要任何信息那么让我知道。

在我的collectionview索引路径

enter image description here

在collectionview单元格中

enter image description here

这是我的代码:

for collectionview:

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

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: menuBarItemDetailId, for: indexPath) as! MenuBarItemDetail
        cell.shopCategory = "600"
        print(cell.shopCategory)
        return cell
    }

for cell:

class MenuBarItemDetail: UICollectionViewCell , UITableViewDataSource , UITableViewDelegate {
    var shopCategory : String?

    override init(frame: CGRect) {
        super.init(frame: frame)

         print("shopCategory :-> ...i am calling from cell :\(shopCategory)")
}

2 个答案:

答案 0 :(得分:3)

因为您的n方法首先调用,然后调用awakeFromNib。您在cellForRow中分配变量的值,因此当第一个项目执行时,其值为cellForRow

  

解决方案

  1. 您的自定义单元格类中的变量

    nil

  2. 在自定义单元类中创建方法

    var myVar : String?

  3. func myMethod(str : String){ myVar = str print("var : \(myVar)")
    }
  4. ,像这样调用你的函数

  5. cellForItem

      

    输出

    enter image description here

答案 1 :(得分:2)

写作时

let cell = collectionView.dequeueReusableCell(withReuseId`entifier: "MenuBarItemDetail", for: indexPath) as! MenuBarItemDetail`

此时调用“覆盖init(frame:CGRect)”。 并且在初始化时没有为shopCategory分配值,这是你获得nil的原因。

在MenuBarItemDetail中添加一个函数“getShopCategory”,当你想要访问shopCategory的值时,可以使用getShopCategory函数获取它。

import Foundation
import UIKit

    class MenuBarItemDetail: UICollectionViewCell  {
        var shopCategory : String?

        func  getShopCategory()  {
         print("shopCategory :-> ...i am calling from cell :\(shopCategory)")
        }


    }

控制器类

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

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MenuBarItemDetail", for: indexPath) as! MenuBarItemDetail
        cell.shopCategory = "600"
        print(cell.shopCategory)
        cell.getShopCategory()
        return cell
    }

cell是MenuBarItemDetail的当前实例,因此它将返回shopCategory的指定值

如果它适合您,请告诉我。 谢谢