如何快速切换布尔值以更改表格视图中的按钮图标

时间:2018-09-29 18:10:19

标签: ios swift xcode swift3

我已经使用字典完成了此操作。如何在每次单击时在onClick方法中更改bool值。     //委托方法

getClass().getResource("/com/example/p2/abc.properties")

//在表格视图中

func onClick(index:Int){

   array[index]["status"] = true
    TableView.reloadData()


}

3 个答案:

答案 0 :(得分:0)

为什么将状态存储在变量中时为什么要创建字典?

var status: Bool! = true

func onClick(index:Int){

   status = status == true ? false : true
   tableView.reloadData()


}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell:TableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TableViewCell
    let  dict = array[indexPath.row]

    cell.lab.text = dict["name"] as! String
    let status:Bool = status
    cell.index     =  indexPath.row

    cell.btn.setImage(UIImage(named: status == true ? "checked" : "unchecked"), for: .normal)

    cell.delegate = self
    return cell
}

答案 1 :(得分:0)

来自:Matt Neuburg书“ iOS 13使用Swift编程基础知识”:

! (不是) !一元运算符反转 Bool 的真值,并将其用作前缀。如果ok为真,则!ok为假,反之亦然。

一种常见的情况是,我们将 Bool 存储在var变量中的某个位置,并且我们希望反转它的值-也就是说,如果它是false,如果为true,则为false。 !运营商解决了问题;我们获取变量的值,用!取反,然后将结果分配回变量:

v.isUserInteractionEnabled = !v.isUserInteractionEnabled

但是,这很麻烦且容易出错。从 Swift 4.2 开始,有一种更简单的方法-在 Bool 变量上调用 toggle 方法:

v.isUserInteractionEnabled.toggle()

答案 2 :(得分:-1)

如果您使用的是 Swift 4.2 ,只需toggle

func onClick(index:Int){
   array[index]["status"]?.toggle()
   tableView.reloadData()
}

如果您仍在 Swift 3 上,则可以在Bool之前使用取反运算符!

func onClick(index:Int){
   array[index]["status"] = !array[index]["status"]!
   tableView.reloadData()
}

(最后的!会强制取消包装值,因为它是可选的)

为避免强制展开可选内容,请按如下所示定义toggle函数,并像在Swift 4.2中一样使用它:

extension Bool {
    mutating func toggle() {
        self = !self
    }
}