我有一个变量,我需要从主UITableView传递到单元子视图以在初始化方法中使用。我试过这样做:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/project-servlet.xml,
/WEB-INF/project-application-context.xml,
/WEB-INF/project-security-context.xml,
/WEB-INF/project-database-context.xml,
/WEB-INF/project-hibernate-context.xml,
/WEB-INF/spring/project-ehcache.xml
</param-value>
</context-param>
然后我以这种方式创建单元格:
class CollectionCell : UITableViewCell {
var collectionElement : PFObject = PFObject(className:"CollectionElement")
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.collectionElementArray = (collectionElement["elementFileArray"] as? [PFObject])!
...
}
该变量未在init方法中设置。
答案 0 :(得分:1)
正如ncerezo所说,细胞没有被创建,它们会被回收,因此不会调用init
个函数。更好的方法是在didSet
变量上使用collectionElement
,并在确保它不是nil
之后根据新值进行更新。然后,当您在tableView(tableView: , cellForRowAtIndexPath:)
中设置单元格的属性时,单元格将实际更新自己。
var collectionElement : PFObject = PFObject(className:"CollectionElement") {
didSet {
// Update the cell's view elements here, rather than an init function
}
}
答案 1 :(得分:0)
UITableView重用单元格,它负责创建它们。 您不是在创建单元格:正如该方法的名称所解释的那样,dequeueReusableCellWithIdentifier只是从表格视图中获取已创建(可能已使用)的单元格。
想象一下,根据您的单元格大小和设备屏幕,tableView可以一次显示10行。它会创建更多,比方说12,然后每次需要使用新信息填充单元格以使其可见时,将在UITableViewDataSource上调用cellForRowAtIndexPath。
当您调用dequeueReusableCellWithIdentifier时,您将获得其中一个已创建的单元格,并且您负责更新其中的必要元素以反映基础数据。因此,你不能假设它的任何部分都是空的&#34;或未初始化。