当我单击它时,UIButton图像不会改变

时间:2019-06-13 23:13:02

标签: swift image uitableview uibutton

我的button类中有TableViewCell,带有默认的框形图片。我希望button的图像在被选择时更改为另一图像,但是这对我不起作用。

这是TableViewCell类:

class NameHeaderTableViewCell: UITableViewCell {

    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var checkMarkButton: UIButton!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    func setup(model: UserModel) {
        nameLabel.text = model.name
    }
}

在我的ViewController中,我添加了一个目标,以在单击button时更改其状态:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let userModel = Data.userModels[section]
    let cell = tableView.dequeueReusableCell(withIdentifier: "nameCell") as! NameHeaderTableViewCell

    cell.setup(model: userModel)
    cell.checkMarkButton.addTarget(self, action: #selector(handleTap), for: .touchUpInside)



    cell.enable(on: false)
    if isUserEditing == true {
        cell.enable(on: true)
    }
    return cell.contentView
}
@objc func handleTap(sender: UIButton) {

    if sender.isSelected {
        sender.isSelected = false
    } else {
        sender.isSelected = true
    }

    tableView.reloadData()
}

//This just enables and disables the table headers depending on if there is text in a UITextField
extension UITableViewCell {
    func enable(on: Bool) {
        for view in contentView.subviews {
            view.isUserInteractionEnabled = on
            view.alpha = on ? 1 : 0.5
        }
    }
}

我还为storyboard中的某些状态设置了图像:

For the default state, I set the image to an unchecked box For the selected state, I set the image to a checked box

同样,当textfield中有文本时,单元格将启用,但是当我尝试单击button时,图像不会改变。我已经仔细检查过,甚至确定目标会员身份正确无误。非常感谢您的任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

尝试使用此方法以编程方式设置按钮的图像。为状态normalselected设置两个不同的图像。

checkMarkButton.setImage(UIImage(named: "selected_image"), for: .selected)
checkMarkButton.setImage(UIImage(named: "normal_image"), for: .normal)

然后在您的selector中:

@objc func handleTap(sender: UIButton) {
    sender.isSelected = !sender.isSelected
}
相关问题