mounika
mounika

Reputation: 11

how to select multiple cells using button and image to check and uncheck

Actually I am trying to select and deselect multiple rows in tableview using image in tableviewcell,and also I want to delete selected rows when I click on delete button which is outside of the tableview.Here I am able to delete the selected row and am able to select and deselect single row.But I want to select and deselect multiple rows to delete when the rows are selected.Can anyone help me to do this.Thanks in advance.

 //In tableviewcell class


    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        if selected{
            checkOrUncheckImg.image = UIImage(named:"check")
        }else{
            checkOrUncheckImg.image = UIImage(named:"uncheck")

        }

        // Configure the view for the selected state
    }

Upvotes: 0

Views: 663

Answers (1)

Josh O'Connor
Josh O'Connor

Reputation: 4962

Create a dictionary or a set of the IDs or indexPath of the cells that are selected. I'm going to use IDs as they are more unique, but it really depends on your DB. If your objects don't have a unique identifier use indexPath

var arrayIDs = Set<String>()

Implement didSelectRowAtIndexPath tableView delegate method. When the user taps the cell, add or remove the ID to the arrayIDs

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let objectID = objects[indexPath.row].id
    if (arrayIDs.contains(objectID)){
        arrayIDs.remove(objectID)
    }else{
        arrayIDs.insert(objectID)
    }
}

In your cellForRowAtIndexPath, if the arrayIDs contains the objects id, set selected image

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "yourCellClass") as? YourCellClass {
    if (arrayIDs.contains(objectID){
        cell.checkOrUncheckImg.image = UIImage(named:"check")
    }else{
        cell.checkOrUncheckImg.image = UIImage(named:"uncheck")
    }
return cell
}

And when clicking the button outside of the cell

 @IBAction func buttonPressed(_ sender: Any) {
    //Do something with arrayIDs (loop through them and delete each one with REST call and from datasource or whatever you're doing, then reloadData to update table
    tableView.reloadData()
}

I didn't test any of this, so there may be some small syntax errors, but you get the gist.

Upvotes: 1

Related Questions