2015-11-17 127 views
0

我有這個問題,其中原型動態UITableViewCell上的數據值在向上滾動或向下滾動時被重置。UITableViewCell - 向上滾動或向下滾動時重置內容

我檢查的單元格是零,因爲建議在其他線程,因爲單元格被重用,但執行從未擊中,如果。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    // Currency formatter 
    let formatter = NSNumberFormatter() 
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 
    formatter.locale = NSLocale(localeIdentifier: "el-GR") 

    // Table view cells are reused and should be dequeued using a cell identifier. 
    let cellIdentifier = "MenuItemTableViewCell" 

    var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! MenuItemTableViewCell 

    if cell.isEqual(nil) { 
     cell = UITableViewCell(style: .Default, reuseIdentifier: "MenuItemTableViewCell") as! MenuItemTableViewCell 
    } 

    // Match category (section) with items from data source 
    let itemsPerSection = items.filter({ $0.category == self.categories[indexPath.section] }) 
    let item = itemsPerSection[indexPath.row] 

    // cell data 
    cell.cellTitle.text = item.name + " " + formatter.stringFromNumber(item.price)! 
    cell.cellDescription.text = item.description 

請幫忙嗎?

問候, 城邦

+0

單元格內容在屏幕上時是否重置?究竟發生了什麼?這種方法看起來很好,還有什麼其他方法與表視圖交互? –

+0

是的,重置發生在我向下滾動然後再次備份時。例如,我有一個自定義的步進控件,帶有一個表示菜單項(食物)數量的標籤。我將它設置爲2,向下滾動(以便單元格不在視圖中),再次向上滾動並且它是0.我在我的tableview中有多個部分,所以我也實現了titleForHeaderInSection和numberOfRowsInSection。沒什麼特別的。 – Polis

+0

我之前有過這個問題。我現在使用翠鳥開源框架,它工作得很好。此外,它支持異步圖像,這將使您的應用程序快很多,沒有任何代碼從你身邊 –

回答

0

細胞每次熄滅屏幕,並重新打開電池被重新創建。因此,如果您修改單元格(即按照您使用步進器所描述的那樣),則必須保存該修改後的值,以便在下一次出現在屏幕上時使用該修改後的值創建該值。

+0

你能舉個例子嗎?我何時/將在哪裏保存修改後的值(即哪種委託方法),以及如何知道下一次細胞進入屏幕時是新的還是同一個?這是我真正困惑的地方。 – Polis

+0

每當單元格離開屏幕時,當它返回到屏幕上時,您將調用「tableView:cellForItemAtIndexPath:'。這意味着用於在'tableView:cellForItemAtIndexPath:'中設置單元格值的變量必須始終保持最新。您將更新它們以響應用戶操作該值(即,在您描述的情況下,步進器的'IBAction')。 –