【发布时间】:2017-07-17 03:23:39
【问题描述】:
我有一个类似测验应用的应用。在 tableViewCell 中有 4 个用于任务变体的按钮。当用户按下按钮时,我需要更改颜色,当我尝试在按钮操作中更改颜色时,所有表格视图单元格中的按钮颜色都会发生变化。但我只需要在我按下的地方进行更改。我已经尝试过编写委托,但它给出的结果相同,这是我编写委托的代码:
class CustomButton: UIButton {
override var isHighlighted: Bool {
didSet {
if isHighlighted {
backgroundColor = UIColor.lightGray
} else {
backgroundColor = UIColor.init(red: 34/255, green: 89/255, blue: 128/255, alpha: 1.0)
}
}
}
}
我已经为按钮添加了目标动作。
var variant1 = UIButton()
var variant2 = UIButton()
var variant3 = UIButton()
var variant4 = UIButton()
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "finalCell")!
variant1 = cell.contentView.viewWithTag(1) as! UIButton
variant2 = cell.contentView.viewWithTag(2) as! UIButton
variant3 = cell.contentView.viewWithTag(3) as! UIButton
variant4 = cell.contentView.viewWithTag(4) as! UIButton
if (numberOfVariants.count != 0) {
let questionTextView = cell.contentView.viewWithTag(5) as! UITextView
questionTextView.text = "\(Questions[indexPath.row].content!)"
variant1.addTarget(self, action: #selector(self.variant1ButtonPressed), for: .touchUpInside)
variant2.addTarget(self, action: #selector(self.variant2ButtonPressed), for: .touchUpInside)
variant3.addTarget(self, action: #selector(self.variant3ButtonPressed), for: .touchUpInside)
variant4.addTarget(self, action: #selector(self.variant4ButtonPressed), for: .touchUpInside)
}
return cell
}
当用户点击按钮时,我已经确定了表格视图的 indexPath(如果有帮助的话):
func variant1ButtonPressed(_ sender:AnyObject) {
print("Variant1")
let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to:self.tableView)
let indexPath = self.tableView.indexPathForRow(at: buttonPosition)
let intIndexpath = Int((indexPath?.row)!)
globalIndexPath = intIndexpath
}
func variant2ButtonPressed(_ sender:AnyObject) {
let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to:self.tableView)
let indexPath = self.tableView.indexPathForRow(at: buttonPosition)
let intIndexpath = Int((indexPath?.row)!)
globalIndexPath = intIndexpath
}
func variant3ButtonPressed(_ sender:AnyObject) {
let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to:self.tableView)
let indexPath = self.tableView.indexPathForRow(at: buttonPosition)
let intIndexpath = Int((indexPath?.row)!)
globalIndexPath = intIndexpath
}
func variant4ButtonPressed(_ sender:AnyObject) {
let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to:self.tableView)
let indexPath = self.tableView.indexPathForRow(at: buttonPosition)
let intIndexpath = Int((indexPath?.row)!)
globalIndexPath = intIndexpath
}
【问题讨论】:
-
您需要在触摸按钮时更改颜色还是在选择时更改颜色?
-
@ReinierMelian 当用户选择一个按钮时改变这个按钮的颜色。
-
你需要实现 isSelected 而不是 isHighlighted 属性来显示选择的颜色。
-
@Surjeet 我试过同样的问题。例如,当我在第一个单元格中按下第一个变体时,它会更改所有单元格中所有第一个变体的颜色
-
您需要将 selectedIndexPath 保存在一个变量中,并且在 cellForRowAt 函数中,您需要将 selectedIndexPath 与 indexPath 进行比较。如果两者相同,则只需要应用选定的颜色,否则应用普通颜色。
标签: ios swift uitableview uibutton