初始化时将数据传递给UITableViewCell

时间:2015-06-19 17:10:06

标签: ios swift

我有一个变量,我需要从主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方法中设置。

2 个答案:

答案 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;或未初始化。