2016-09-19 74 views
-1

我有一個表格視圖,我想改變選定的表格視圖選中的單元格顏色,並且滾動表格視圖時單元格顏色沒有改變。有我的代碼:Store TableView selected Row

override func tableView(tableView: UITableView, didSelectRowAtIndexPath 
indexPath: NSIndexPath) { 
    let selectCell = tableView.indexPathForSelectedRow 
     self.selectedCell.append(selectCell!) 
for i in selectedCell 
     { 
      if(!(i .isEqual(indexPath))) 
      { 
       let currentCell = tableView.cellForRowAtIndexPath(i)! as UITableViewCell 

       currentCell.backgroundColor = UIColor.lightGrayColor() 
      } 
     } 

這是滾動表視圖時代碼崩潰。

+0

製作一個變量,該變量將在選擇時將當前的indexpath.row存儲在didSelectRowAtIndexPath上。現在檢查cellForRowAtIndexPath裏面的當前indexpath.row。如果存儲的indexpath.row匹配,則更改顏色。 – Tuhin

+0

你需要改變所有選定的索引顏色? –

+0

如果您需要更改所有選定的行顏色,請將所選索引保存在didSelectRowAtIndexPath方法的數組中,並在cellForRowAtIndexPath方法中檢查索引路徑是否存在於數組中,然後進行處理 –

回答

2

你的代碼對我來說似乎很陌生。每次選擇一個單元格時,不需要設置所有其他單元格的背景顏色。定義你的celectedCellsInt:Bool類型的字典,以便您可以將其設置爲true每個indexpath.row這樣的:

var selectedCells = [Int: Bool]() 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    if let cell = tableView.cellForRowAtIndexPath(indexPath) { 
     cell.backgroundColor = UIColor.lightGrayColor() 
     selectedCells[indexPath.row] = true 
    } 
} 

,然後在cellForRowAtIndexPath方法檢查字典設置的backgroundColor,就像這樣:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("YourCellIdentifier", forIndexPath: indexPath) 

    if selectedCells[indexPath.row] == true { 
     // Color for selected cells 
     cell.backgroundColor = UIColor.lightGrayColor() 
    } else { 
     // Color for not selected cells 
     cell.backgroundColor = UIColor.whiteColor() 
    } 
    //Rest of your Cell setup 

    return cell 
}