繁体   English   中英

将数据从UItableviewController传递到UItableViewcell

[英]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.textlabel2.text显示正确的值,但是pathCellMembermyCustomObjectCellMember显示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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM