2017-08-28 79 views
0

我想在TableView中爲我的活動對象設置不同的樣式。我試着爲我的對象(myObject.isActive)設置一個標誌,然後像我這樣在我的自定義UITableViewCell中讀取它;如何樣式UITableViewCell不同?

var myArray = [MyObject]() 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    if let cell = tableView.dequeueReusableCell(withIdentifier: "myCustomCell", for: indexPath) as? myCustomCell { 
     if myArray.count > 0 { 
      // Return the cell 
      let myObject = myArray[indexPath.row] 
      cell.updateUI(myObject: myObject) 

      return cell 
     } 
    } 

    return UITableViewCell() 
} 

myCustomCell:

func updateUI(myObject: MyObject){ 
    if myObject.isActive { 
     self.selectedCell() 
    } 
} 

func selectedCell() { 
    labelTitle.font = UIFont(name: "Montserrat-Medium", size: 32) 
    labelTitle.textColor = UIColor(hex: 0x64BA00) 
} 

這工作時的tableView數據負載很大。但是當我滾動tableView時,其他單元格的樣式也不同。我該如何解決這個問題?

回答

4

單元格被重用。你需要處理所有的可能性。如果myObject處於活動狀態,則您的updateUI方法更改單元格,但如果不是,則不嘗試重置單元格。

你需要的東西,如:

func updateUI(myObject: MyObject){ 
    if myObject.isActive { 
     selectedCell() 
    } else { 
     resetCell() 
    } 
} 

並添加:

func resetCell() { 
    // Set the cell's UI as needed 
} 

另一個選項是重寫表格單元格類的prepareForReuse方法。該方法應該將單元重置爲其初始狀態。

相關問題