gpt4 book ai didi

swift - TableView 单元格,在哪里设置所选单元格的样式?

转载 作者:行者123 更新时间:2023-11-28 14:11:07 27 4
gpt4 key购买 nike

我在这个论坛上四处张望,但没有找到任何与此相关的内容。

我想控制 UITableView 的选择功能:在选择和取消选择时为单元格设置样式,并使其在重复使用后保留。


用户点击时的 Action 是带有动画的,当然是在TableViewController的文件中声明的:

func selectWorldMessage(indexPath: IndexPath) {

...

cell.attributedText = worldMessage.message.wholeWorldMessageAttributedString()

UIView.animate(withDuration: duration, animations: {
cell.bubbleImageView.tintColor = appColors.worldMessageBubbleSelected
cell.timeLabel.isHidden = false
cell.messageLabelBottomConstraint.constant = 14
cell.messageLabelTopConstraint.constant = 14
cell.timeLabel.alpha = 1.0

self.view.layoutIfNeeded()
self.tableView.beginUpdates()
self.tableView.endUpdates()
self.lastContentOffsetY = nil
}, completion: nil)

...

func deselectWorldMessage(indexPath: IndexPath) {

...

但是.. 假设您向下和向上滚动,单元格被重复使用。我必须再次设计它的样式。我应该在哪里做?

A)TableViewControllercellForRowAt 函数中?

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

....

// If previously was selected
if (currentSelectedIndexPath == indexPath) {

cell.messageLabel.attributedText = worldMessage.message.wholeWorldMessageAttributedString()
cell.bubbleImageView.tintColor = appColors.worldMessageBubbleSelected
cell.timeLabel.isHidden = false
cell.messageLabelBottomConstraint.constant = 14
cell.messageLabelTopConstraint.constant = 14

} else {

cell.messageLabel.attributedText = worldMessage.message.shortenWorldMessageIfNeededAttributedString()
cell.bubbleImageView.tintColor = appColors.worldMessageBubble
cell.timeLabel.isHidden = true
cell.messageLabelBottomConstraint.constant = 10
cell.messageLabelTopConstraint.constant = 10


}

B) 或者在 CellsetSelected 函数中?

override func setSelected(_ selected: Bool, animated: Bool) {
if selected == true {
self.messageLabel.attributedText = worldMessage.message.wholeWorldMessageAttributedString()
self.bubbleImageView.tintColor = appColors.worldMessageBubbleSelected
self.timeLabel.isHidden = false
self.messageLabelBottomConstraint.constant = 14
self.messageLabelTopConstraint.constant = 14
} else {
self.messageLabel.attributedText = worldMessage.message.shortenWorldMessageIfNeededAttributedString()
self.bubbleImageView.tintColor = appColors.worldMessageBubble
self.timeLabel.isHidden = true
self.messageLabelBottomConstraint.constant = 10
self.messageLabelTopConstraint.constant = 10
}

}

什么会更好、耗能更少?

最佳答案

代码应该在您的单元格文件中,因为它是与单元格相关的东西,并且在重复使用后会保留下来。由您的 View Controller 处理单元格的“填充”逻辑,但在这种情况下,您想要更改单元格的 UI 样式。如果将代码放在 View Controller 中,当您更改单元格(通过添加或删除标签)时,您也必须更改 Controller 。此外,您还需要保存选定的索引路径以检查 cellForRowAt 方法。

class TableViewCell: UITableViewCell {
override func setSelected(_ selected: Bool, animated: Bool) {
if selected {
self.backgroundColor = .red
} else {
self.backgroundColor = .green
}
}
}

关于swift - TableView 单元格,在哪里设置所选单元格的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52525854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com