簡體   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