显示有关 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
方法需要适当地设置单元格。
我正在尝试实现一种效果,当按下详细信息按钮时,详细信息将滑入 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
方法需要适当地设置单元格。