我对IOS开发完全陌生,并且一直坚持这个。我在这里尝试一个非常简单的事情,我希望当我在TableView
中选择一个单元格时,它的背景颜色变为灰色,当我选择另一个单元格时,前一个灰色单元格的背景颜色应该是恢复为默认颜色。
为实现这一点,我使用以下代码:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
let currentCell = tableView.cellForRow(at: indexPath) as! RoundTableViewCell
currentCell.contentView.backgroundColor = Util.hexStringToUIColor(hex: "#d3d3d3")
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)
{
let currentCell = tableView.cellForRow(at: indexPath) as? RoundTableViewCell // Error
currentCell.contentView.backgroundColor = Util.hexStringToUIColor(hex: "#ffffff")
}
上面的代码工作得很好,但是当我尝试点击一个新单元格时崩溃,而前一个选定单元格在表格视图中不可见,因为它被滚动了。我无法理解这里发生了什么。
修改
cellForRowAt :
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell: RoundTableViewCell = (tableView.dequeueReusableCell(withIdentifier: "cell")! as? RoundTableViewCell)!
cell.contentView.backgroundColor = Util.hexStringToUIColor(hex: "#ffff
return cell
}
答案 0 :(得分:2)
您需要检查细胞是否可用
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath)
{
if let currentCell = tableView.cellForRow(at: indexPath) as? RoundTableViewCell {
currentCell.contentView.backgroundColor = Util.hexStringToUIColor(hex: "#ffffff")
}
}
答案 1 :(得分:1)
b
如果您想要多个小区选择。
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
....
....
if cell.isSelected == true {
currentCell.contentView.backgroundColor = Util.hexStringToUIColor(hex: "#d3d3d3")
}
else {
currentCell.contentView.backgroundColor = Util.hexStringToUIColor(hex: "#ffffff")
}
....
....
}
应用程序崩溃,因为当单元格从屏幕上消失时,它会从内存中释放出来,因此您获得了nil值。所以试试这个
table.allowsMultipleSelection = true
答案 2 :(得分:0)
使用以下代码获得预期结果。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell
cell.selectedBackgroundView = UIImageView()
cell.backgroundView=UIImageView()
let selectedBackground : UIImageView = cell.selectedBackgroundView as! UIImageView
selectedBackground.image = UIImage.init(named:"selected.png");
let backGround : UIImageView = cell.backgroundView as! UIImageView
backGround.image = UIImage.init(named:"defaultimage.png");
return cell
}