如何使选定的单元格为自定义单元格 UITableViewCell 变成不同的颜色
Posted
技术标签:
【中文标题】如何使选定的单元格为自定义单元格 UITableViewCell 变成不同的颜色【英文标题】:How to make selected cell turn a different color for custom cells UITableViewCell 【发布时间】:2020-07-11 16:02:48 【问题描述】:我想让选定的单元格成为特定颜色 (UIColor.systemGray)。我已经尝试了几乎所有的答案,但由于某种原因,我的细胞无法正常工作。
这是我的视图控制器类的一部分:
extension CommunicationViewController: UITableViewDataSource, UITableViewDelegate
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return communicationcells.count
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let communicationCell = communicationcells[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "CommunicationCell") as! CommunicationCell
cell.backgroundButton.tag = indexPath.row
cell.backgroundButton.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside)
cell.setCommunication(communication: communicationCell)
return cell
struct Holder
static var _myComputedProperty:Int = -1
var myComputedProperty:Int
get
return Holder._myComputedProperty
set(newValue)
Holder._myComputedProperty = newValue
@objc func buttonTapped(_ sender: UIButton)
myComputedProperty = sender.tag
performSegue(withIdentifier: "CommunicationSegue", sender: self)
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
let detailsController = segue.destination as! CommunicationDetailsViewController
detailsController.passthroughstring = String(myComputedProperty)
这是我的通信单元控制器:
class CommunicationCell: UITableViewCell
@IBOutlet var backgroundcontentView: UIView!
@IBOutlet weak var CommunicationType: UILabel!
@IBOutlet weak var subject: UILabel!
@IBOutlet weak var partnerType: UILabel!
@IBOutlet weak var partnerID: UILabel!
@IBOutlet weak var effectiveFrom: UILabel!
@IBOutlet weak var effectiveTo: UILabel!
@IBOutlet weak var downtimeFrom: UILabel!
@IBOutlet weak var downtimeTo: UILabel!
@IBOutlet weak var backgroundButton: UIButton!
@IBOutlet var collectionOfCommunicationLabels: Array<UILabel>!
func applyTheme()
for i in 0..<collectionOfCommunicationLabels.count
collectionOfCommunicationLabels[i].textColor = Theme.current.textColor
collectionOfCommunicationLabels[i].backgroundColor = Theme.current.backgroundColor
backgroundcontentView.backgroundColor = Theme.current.backgroundColor
CommunicationType.textColor = Theme.current.textColor
subject.textColor = Theme.current.textColor
partnerType.textColor = Theme.current.textColor
partnerID.textColor = Theme.current.textColor
effectiveFrom.textColor = Theme.current.textColor
effectiveTo.textColor = Theme.current.textColor
downtimeFrom.textColor = Theme.current.textColor
downtimeTo.textColor = Theme.current.textColor
// backgroundButton.backgroundColor = Theme.current.backgroundColor
func setCommunication(communication: Communication)
CommunicationType.text = communication.communicationType
subject.text = communication.subject
partnerType.text = communication.partnerType
partnerID.text = communication.partnerID
effectiveFrom.text = communication.effectiveFrom
effectiveTo.text = communication.effectiveTo
downtimeFrom.text = communication.downtimeFrom
downtimeTo.text = communication.downtimeTo
applyTheme()
我已经尝试了几乎所有关于堆栈溢出的答案,但对我没有任何帮助。
【问题讨论】:
使用 tableView 委托 didSelectRowAt indexPath 而不是使用按钮作为背景视图。 【参考方案1】:除了 cellForRowAtIndexPath 方法之外,您能否尝试实现 didSelectRowAtIndexPath 方法?在这种情况下,您将不需要背景按钮,并且您将在 didSelectRowAtIndexPath 方法中在点击 tableview 中的任何行时获得回调。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let selectedCell = tableView.cellForRow(at: indexPath)
selectCell.backgroundColor = .red //change to any color you want it to change to on selection
performSegue(withIdentifier: "CommunicationSegue", sender: self)
【讨论】:
那我该放什么来代替背景按钮呢?我将如何调用该函数来执行 segue。 @BobStone 你可以用上面提到的同样的方法添加它(我已经做了相应的编辑) 我试过了,但 backgroundColor 仍然没有改变。 尝试删除背景按钮和背景内容视图以便您能够看到它 我想通了。我使用 didhighlight 和 didunhighlight 进行颜色更改,但仍然使用 selected 进行 segue 更改。最大的问题是按钮。我仍然会赞成将我引向正确的答案。谢谢!以上是关于如何使选定的单元格为自定义单元格 UITableViewCell 变成不同的颜色的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 选定的单元格在滚动时不会保持选中状态