Ios 如何更改tableview单元格swift3中的按钮背景色

Ios 如何更改tableview单元格swift3中的按钮背景色,ios,uitableview,swift3,tableviewcell,Ios,Uitableview,Swift3,Tableviewcell,我有一个UITableViewCell。在TableViewCell中,我在一行中有7个按钮。我想演奏音乐。当我按下按钮1时,它的背景颜色应该改变。如果我按下按钮2,它的背景颜色应该改变,按钮1将被取消选择。我还为每一行的按钮设置了标签,但我不明白,怎么办?声音播放正常,但我无法选择和取消选择按钮。我正在使用swift3。提前谢谢 我建议您从UIButton中创建子类,如下所示: class CustomButton: UIButton { var isPressed = false ov

我有一个
UITableViewCell
。在TableViewCell中,我在一行中有7个按钮。我想演奏音乐。当我按下按钮1时,它的背景颜色应该改变。如果我按下按钮2,它的背景颜色应该改变,按钮1将被取消选择。我还为每一行的按钮设置了标签,但我不明白,怎么办?声音播放正常,但我无法选择和取消选择按钮。我正在使用
swift3
。提前谢谢


我建议您从UIButton中创建子类,如下所示:

class CustomButton: UIButton {

var isPressed = false

override init(frame: CGRect) {
    super.init(frame: frame)
}

convenience init(frame: CGRect, title: String, tag: Int) {
    self.init(frame: frame)

    self.frame = frame
    setTitle(title, for: .normal)
    setTitleColor(.white, for: .normal)
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    switch tag {
        case 0: //Play a music
            if isPressed{
                backgroundColor = .black
            } else {
                backgroundColor = .clear
            }
        case 1: //Play a video
            if isPressed{
                backgroundColor = .black
            } else {
                backgroundColor = .clear
            }
    default: //Other
        if isPressed{
            backgroundColor = .black
        } else {
            backgroundColor = .clear
        }
    }

    if isPressed { isPressed = false } else { isPressed = true }
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

@车坛解决方案:第一个

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cellData", for: indexPath)

    let btn1 = cell.viewWithTag(1) as! UIButton
    let btn2 = cell.viewWithTag(2) as! UIButton
    let btn3 = cell.viewWithTag(3) as! UIButton
    let btn4 = cell.viewWithTag(4) as! UIButton
    let btn5 = cell.viewWithTag(5) as! UIButton
    let btn6 = cell.viewWithTag(6) as! UIButton

    btn1.addTarget(self, action: #selector(btnClicked(sender:)), for: .touchUpInside)
    btn2.addTarget(self, action: #selector(btnClicked(sender:)), for: .touchUpInside)
    btn3.addTarget(self, action: #selector(btnClicked(sender:)), for: .touchUpInside)
    btn4.addTarget(self, action: #selector(btnClicked(sender:)), for: .touchUpInside)
    btn5.addTarget(self, action: #selector(btnClicked(sender:)), for: .touchUpInside)
    btn6.addTarget(self, action: #selector(btnClicked(sender:)), for: .touchUpInside)

    return cell
}
这将在何时取消 `func btnClickec(发送方:UIButton){ sender.isSelected=true

    let cell = sender.superview?.superview as! UITableViewCell

    let btn1 = cell.viewWithTag(1) as! UIButton
    let btn2 = cell.viewWithTag(2) as! UIButton
    let btn3 = cell.viewWithTag(3) as! UIButton
    let btn4 = cell.viewWithTag(4) as! UIButton
    let btn5 = cell.viewWithTag(5) as! UIButton
    let btn6 = cell.viewWithTag(6) as! UIButton

    let arr = [btn1,btn2,btn3,btn4,btn5,btn6];

    for index in 0...5{
        let btn = arr[index]
        if index+1 == sender.tag{
            btn.isSelected = true
        }else{
            btn.isSelected = false
        }
    }
}
`

第二个:或者你也可以在tableviewcell中查看集合,这就是我做的:

首先是功能:

func switchColor(isWhite: Bool, sender: UIButton) {
        if isWhite == true {
            sender.backgroundColor = UIColor.clear
            sender.setTitleColor(UIColor.white, for: UIControlState.normal)
        }else if isWhite == false {
            sender.backgroundColor = UIColor.white
            sender.setTitleColor(UIColor.clear, for: UIControlState.normal)
        }
那么我把它叫做:

@IBAction func RepeatWeeklyPressed(_ sender: UIButton) {
        if sender.backgroundColor == UIColor.white {
            switchColor(isWhite: true, sender: sender)
        }else {
            switchColor(isWhite: false, sender: sender)
        }
    print("Pressed a repeat button")
    }

希望这有帮助!

您希望将按钮子类化为CustomButton或任何您想调用的名称。并且您需要创建一个委托,让您的viewcontroller知道发生了什么

创建一个接受整数的func。这将是接受按钮标记并执行一些代码的代码。@Gabs的想法是对的

func select(index: Int) {
  switch sender.tag {
        case 0: //do something
        case 1: //do something
        }
}
创建一个iAction,然后将所有按钮链接到它

 @IBAction func buttonTapped(_ sender: Any) {
  select(index: sender.tag)
}
缺少的只是通知viewController点击了哪个按钮。请在CustomCell视图文件中为其设置一个委托,并让其在iAction中捕获sender.tag。请确保也符合viewController,以便委托能够正常工作

func select(index: Int) {
  switch sender.tag {
        case 0: //do something
        case 1: //do something
        }
}
 @IBAction func buttonTapped(_ sender: Any) {
  select(index: sender.tag)
}