![](/img/trans.png)
[英]Passing data from UItableviewController to UItableViewcell in ios
[英]passing data from UItableviewController to UItableViewcell
我不明白为什么某些值从tableViewController
很好地传递到我的自定义UITableViewCell
,而另一些则不能。
在我的UItableviewController.cellForRowAtIndexPath
,在返回此单元格之前,我设置了一些值的单元格:
cell.label1.text = myCustomObject.id
cell.label2.text = myCustomObject.path
cell.myCustomObjectCellMember = myCustomObject
cell.pathCellMember = myCustomObject.path
return cell
在自定义UITableViewCell
端,在awakeFromNib
方法中,前两个单元格成员均为Ok,后两个单元格包含nil
。
前两个单元格成员与后两个单元格成员之间的唯一区别是,前两个单元格成员声明为IBOutlet
并链接到情节提要,而另两个单元格未链接到UI。 但是,从tableViewController
写入这些变量应该没问题吧?
这是自定义UITableViewCell
中这些变量的声明:
@IBOutlet weak var label1: UILabel!
@IBOutlet weak var label2: UILabel!
var pathCellMember : String!
var myCustomObjectCellMember: MyCustomObjectCellMember!
登录时(在UITableViewCell.awakeFromNib
内部), label1.text
和label2.text
显示正确的值,但是pathCellMember
和myCustomObjectCellMember
显示nil
而不是UItableviewController.cellForRowAtIndexPath
分配的值。
根据要求,提供更明确的代码:
class CustomCellTableViewCell: UITableViewCell {
@IBOutlet weak var label1: UILabel!
@IBOutlet weak var label2: UILabel!
var pathCellMember : String!
var myCustomObjectCellMember: MyCustomObjectCellMember!
override func awakeFromNib() {
super.awakeFromNib()
println("label1 : \(self.label1.text!)") //displays the value assigned
println("label2 : \(self.label2.text!)") //displays the value assigned
println("pathCellMember: \(self.pathCellMember!)") //displays nil
println("myCustomObjectCellMember.path : \(self.myCustomObjectCellMember.path)") //displays `nil`
}
谢谢
在cellForRowAtIndexPath中,您将在其中重复使用(出队)每个单元格。 在这里,您需要将vars值分配给每个单元格。 当唤醒确实设置了初始值时,它们只会在单元被重用之前第一次触发。 在cellForRow或willDisplayCell中分配所有内容(背景颜色等)。
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableView_Class/
讨论出于性能原因,表视图的数据源通常在为其表tableView:cellForRowAtIndexPath:方法中的行分配单元格时应重用UITableViewCell对象。 表视图维护数据源已标记为可重复使用的UITableViewCell对象的队列或列表。 当要求为表格视图提供新的单元格时,请从数据源对象中调用此方法。 如果一个可用的单元格可用,则此方法使该单元出队,或者使用您先前注册的类或nib文件创建一个新的单元格。 如果没有可供重用的单元格,并且您没有注册类或nib文件,则此方法返回nil。 如果您为指定的标识符注册了一个类,并且必须创建一个新的单元格,则此方法通过调用其initWithStyle:reuseIdentifier:方法来初始化该单元格。 对于基于笔尖的单元格,此方法从提供的笔尖文件中加载单元格对象。 如果现有单元可供重用,则此方法改为调用单元的prepareForReuse方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.