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)
}