无法比较图像,一个来自UIButton

时间:2018-01-08 01:40:42

标签: swift uibutton

我知道如何获取按钮的图像,但它似乎无法在这里工作:

@IBAction func checkButtonClicked(_ sender: UIButton) {
    if sender.image(for: .normal) == #imageLiteral(resourceName: "btn_check_off_normal_holo_light") {
        sender.setImage(#imageLiteral(resourceName: "btn_check_on_focused_holo_light").withRenderingMode(.alwaysOriginal), for: .normal)
    } else {
        sender.setImage(#imageLiteral(resourceName: "btn_check_off_normal_holo_light").withRenderingMode(.alwaysOriginal), for: .normal)
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cellIdentifier = "UserCell"

    guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? UsersTableViewCell else {
        fatalError("The dequeued cell is not an instance of SelectTableViewCell.")
    }

    cell.checkButton.setImage(#imageLiteral(resourceName: "btn_check_off_normal_holo_light").withRenderingMode(.alwaysOriginal), for: .normal)
    return cell
}

我在cellForRowAt中设置按钮图像(按钮位于动态tableview中的单元格中。在模拟器中,我可以看到图像 正在设置。但是,这个一段代码没有运行:

if sender.image(for: .normal) == #imageLiteral(resourceName: "btn_check_off_normal_holo_light") {
    sender.setImage(#imageLiteral(resourceName: "btn_check_on_focused_holo_light").withRenderingMode(.alwaysOriginal), for: .normal)
}

设置断点告诉我Xcode会跳过if语句中的代码:即使图像显然已设置为if语句中的图像。

我想知道我是否遗漏了一些非常简单的东西?

1 个答案:

答案 0 :(得分:1)

这里的一般方法不正确。而不是尝试将按钮的当前图像作为切换图像的方式进行检查,您应该将一个标记作为用于填充表视图的数据模型的一部分。

cellForRowAt中需要此标记,以便您知道每个单元格上显示的图像(滚动时单元格会被重复使用)。

然后你的checkButtonClicked应该只是切换给定行的标志,然后告诉表视图重新加载那一行。