我知道如何获取按钮的图像,但它似乎无法在这里工作:
@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
语句中的图像。
我想知道我是否遗漏了一些非常简单的东西?
答案 0 :(得分:1)
这里的一般方法不正确。而不是尝试将按钮的当前图像作为切换图像的方式进行检查,您应该将一个标记作为用于填充表视图的数据模型的一部分。
cellForRowAt
中需要此标记,以便您知道每个单元格上显示的图像(滚动时单元格会被重复使用)。
然后你的checkButtonClicked
应该只是切换给定行的标志,然后告诉表视图重新加载那一行。