显示有关 tableview 的所有单元格的详细信息

Show details on ALL cells of tableview

我正在尝试实现一种效果,当按下详细信息按钮时,详细信息将滑入 tableView 的所有单元格。到目前为止,我已经通过遍历 table 视图的可见单元格实现了这个槽。每个单元格都有一个屏幕外的详细信息标签,它会随着动画滑入。这是它的样子:

当然,因为我正在遍历可见单元格,所以在按下详细信息按钮后向下滚动时,底部的单元格没有详细信息。我知道屏幕上没有显示的单元格不在内存中,但也许还有另一种方法?

编辑 这是当用户按下 "Details" 按钮

时执行的代码
let animationDuration = 0.4
    for cell in myTableView.visibleCells {
        let cell = cell as! MainCell

        if !detailView {
            sender.tintColor = UIColor.gray
            detailView = true

            UIView.animate(withDuration: animationDuration, animations: ({
                cell.noteLbl.center.x = cell.noteLbl.center.x + 100
            }))
            UIView.animate(withDuration: animationDuration, animations: ({
                cell.accessoryLbl.center.x = cell.accessoryLbl.center.x + 100
            }))
            UIView.animate(withDuration: animationDuration, animations: ({
                cell.timeLbl.center.x = cell.timeLbl.center.x + 100
            }))
        } else {
            detailView = false
            sender.tintColor = UIColor.white

            UIView.animate(withDuration: animationDuration, animations: ({
                cell.noteLbl.center.x = cell.noteLbl.center.x - 100
            }))
            UIView.animate(withDuration: animationDuration, animations: ({
                cell.accessoryLbl.center.x = cell.accessoryLbl.center.x - 100
            }))
            UIView.animate(withDuration: animationDuration, animations: ({
                cell.timeLbl.center.x = cell.timeLbl.center.x - 100
            }))
        }

    }

cellForRowAt 代码

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "MainCell") as! MainCell
    let shiftForRow = shifts[indexPath.section][indexPath.row]

    cell.noteLbl.text = shiftForRow.note
    cell.dateLbl.text = shiftForRow.date
    cell.accessoryLbl.text = calcTotalHours(STField: shiftForRow.startingTime!, ETField: shiftForRow.endingTime!, lunchTime: shiftForRow.lunchTime!)
    cell.timeLbl.text = shiftForRow.startingTime! + " - " + shiftForRow.endingTime!

    return cell
}

当您滚动 table 视图(以及最初显示时)时,将为每个需要显示的单元格调用 cellForRowAt 方法。

目前,您的 cellForRowAt 仅在其 "normal" 布局中显示您的单元格,就好像从未按下过详细信息按钮一样。您需要更新 cellForRowAt 方法,以便它根据是否应显示详细信息来配置单元格。

您可能需要一个标志来跟踪当前是否正在显示详细信息。根据按下的详细信息按钮切换该标志。

然后,根据该标志的状态,您的 cellForRowAt 方法需要适当地设置单元格。