单元格变量为 nil,其中设置了值 collectionview 索引路径
Posted
技术标签:
【中文标题】单元格变量为 nil,其中设置了值 collectionview 索引路径【英文标题】:cell variable is nil where value was set collectionview index path 【发布时间】:2017-01-17 10:34:19 【问题描述】:我花了很多时间 .. 但我不知道为什么它不工作 .. 调用索引路径的单元格并正确设置值,但单元格类我发现 nil 值 .. 如果您需要任何信息,请告诉我知道。
在我的 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
对于单元格:
class MenuBarItemDetail: UICollectionViewCell , UITableViewDataSource , UITableViewDelegate
var shopCategory : String?
override init(frame: CGRect)
super.init(frame: frame)
print("shopCategory :-> ...i am calling from cell :\(shopCategory)")
【问题讨论】:
取可选值使用 print(cell.shopCategory)! 是的!我已经完成了,请检查第一张图片但没有结果..你是说那个吗 @Lalitkumar 是的可选值将其用作我的第一张图片 @cristanlika 在单元格类 UITableViewDataSource , UITableViewDelegate 中不需要这些,因为这是集合视图单元格,因此您需要将所有代表放入视图控制器并删除初始化函数。没必要。你可以使用 awakeFromNib 【参考方案1】:因为您的 awakeFromNib
方法首先被调用,然后是 cellForRow
。您在 cellForRow
中分配变量的值,所以当第一个项目执行时,它的值是 nil
。
解决方案
自定义单元格中的变量
var myVar : String?
在您的自定义单元类中创建一个方法
func myMethod(str : String)
myVar = str
print("var : \(myVar)")
在cellForItem
,像这样调用你的函数
cell.myMethod(str: "343")
输出
【讨论】:
首先我没有在我的项目中的任何地方使用 awakeFromNib 第二如果是这样,那是什么解决方案。你能指导我做什么吗? Init方法也先调用了,看看吧。 是的,似乎。我能做些什么 ?请问有什么解决办法 @cristanlika 用我得到的输出检查解决方案。如果它对您有用,请接受答案并投票,否则请写下您的问题。【参考方案2】:当你写作时
let cell = collectionView.dequeueReusableCell(withReuseId`entifier: "MenuBarItemDetail", for: indexPath) as! MenuBarItemDetail`
当时调用了“override 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 的指定值
如果它对你有用,请告诉我。 谢谢
【讨论】:
以上是关于单元格变量为 nil,其中设置了值 collectionview 索引路径的主要内容,如果未能解决你的问题,请参考以下文章
iOS:dequeueReusableCellWithIdentifier 返回单元格,其中 IBOutlets 为 nil
Swift Cocoa Touch 自定义单元格为 IBOutlets 返回 nil
试图从 UITableView 返回选定的单元格,但它只返回 nil