Swift iOS-如何更改已在屏幕上加载的所有可见单元的TableView单元属性,而无需重新加载数据?

Lan*_*ria 1 uitableview uicolor ios swift

我正在使用splitViewController,在主端,我有一个tableView,在详细端,我有任何信息将从所选单元格中显示。

在单元格已加载到屏幕上之后,我从明细端向主端发送通知以更改单元格内的textLabel的颜色(我不想重新加载)。

  1. 单元格首先加载黑色textlabel的

在此处输入图片说明

  1. 当单元格仍在屏幕上时,会发送通知,我想将textLabels更改为lightGray

在此处输入图片说明

  1. 当单元格仍在屏幕上时,将发送其他通知,我想将textLabels更改回黑色

在此处输入图片说明

一切正常,但问题是我现在的操作方式,我只能分别更改每个可见的单元格,但我想一次更改它们。如果有10个单元,那么会有很多代码,所以我知道必须有一种更有效的方法。

@objc fileprivate func changeTextLabelColorToLightGray(){

        let indexPathZero = NSIndexPath(row: 0, section: 0)
        let cellZero = tableView.cellForRow(at: indexPathZero as IndexPath) as! MyCustomCell
        cellZero.textLabel.text = UIColor.lightGray

        let indexPathOne = NSIndexPath(row: 1, section: 0)
        let cellOne = tableView.cellForRow(at: indexPathZero as IndexPath) as! MyCustomCell
        cellOne.textLabel.text = UIColor.lightGray
}

@objc fileprivate func changeTextLabelColorBackToBlack(){

        let indexPathZero = NSIndexPath(row: 0, section: 0)
        let cellZero = tableView.cellForRow(at: indexPathZero as IndexPath) as! MyCustomCell
        cellZero.textLabel.text = UIColor.black

        let indexPathOne = NSIndexPath(row: 1, section: 0)
        let cellOne = tableView.cellForRow(at: indexPathZero as IndexPath) as! MyCustomCell
        cellOne.textLabel.text = UIColor.black
}
Run Code Online (Sandbox Code Playgroud)

如何执行以上操作,访问所有可见的单元格并立即更改它们的属性,而不是分别更改?

Jer*_*emy 5

您可以访问属性visibleCellsUITableViewUICollectionView。这是您可以做什么的示例:

    tableView?.visibleCells.forEach { cell in
        if let cell = cell as? YourCell {
            cell.changeTextLabelColorBackToBlack()
        }
    }
Run Code Online (Sandbox Code Playgroud)