как переключить логическое значение в swift для изменения значка кнопки в табличном представлении - PullRequest
0 голосов
/ 29 сентября 2018

Я сделал это, используя словарь. Как изменить значение bool в методе onClick при каждом нажатии.// метод делегата

func onClick(index:Int){

   array[index]["status"] = 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 = dict["status"] as! Bool
    cell.index     =  indexPath.row


    if(status == true){
        cell.btn.setImage(UIImage(named: "checked"), for: .normal)
    }else{
       cell.btn.setImage(UIImage(named: "unchecked"), for: .normal)
    }

    cell.delegate = self



    return cell
}

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Просто переключатель это если вы используете Swift 4.2 :

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
    }
}
0 голосов
/ 29 сентября 2018

почему вы создали словарь, когда вы можете сохранить статус в переменной?

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