Home > Net >  Cell button tableView Swift
Cell button tableView Swift

Time:04-08

I have a tableView with Sections and every section got todoitems that u add. I'm trying to animate in my picture on the todoItem I click with my cell button delegate function. But I really don't know how to connect to just that one item and make it animate. What I'm trying to get access to is the same access to a cell like I do in didSelectRow but in this cellButtonFunction, since it's the button in the cell I'm gonna press on and not the whole cell.

The thing I wanna accomplish with pressing the button is like this example:

cellPressed.image.ishidden = false cellPressed.image.animate()

This cell image have an animated class that works set to it, it's just that I need to hit the specific cell for this

Watched a few YouTube videos and researched but I don't get it to work, so I hope you guys can help me


extension ViewController: FirstTableViewCellDelegate {
    func myImageButtonTapped(with index: IndexPath, view: AnimatedCheckmarkView) {
        HapticsManager.shared.selectionVibrate()
        let todo = self.tableViewCoreData[index.section].sortedItems[index.row - 1]

        todo.isMarked = !todo.isMarked
        
        if todo.isMarked == true {
            self.tableViewCoreData[index.section].totalMarked  = 1
            view.animate(withDuration: 1.0, delay: 0.7)
            view.isHidden = false
            do {
               try self.context.save()
            }
            catch{
                //error
            }
            tableView.reloadData()
        } else {
            view.isHidden = true
            self.tableViewCoreData[index.section].totalMarked -= 1
            do {
               try self.context.save()
            }
            catch{
                //error
            }
            tableView.reloadData()
        }

Here is the function. Litterly everything in this works except the view.animate() that animates one random view instead

CodePudding user response:

First create delegate to receive action from cell

protocol CellDelegate:AnyObject{
 /// pass arguments as per requirement 
 func cell(buttonDidPressed indexPath: IndexPath)
}

Now in your Cell class create weak reference of delegate

class Cell: UICollectionViewCell{
 weak var delegate: CellDelegate? = nil
 var indexPath: IndexPath!

/// code 

 @IBAction func buttonDidPressed(_ sender: UIButton) {
  delegate?.cell(buttonDidPressed: indexPath)
 }
}

now in ur controller confirm this protocol

extension ViewController: UICollectionViewDelegate,
                          UICollectionViewDataSource,
                          CellDelegate{
   
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        // let cell : Cell dequeueReusableCell your cell
        cell.delegate = self
        cell.indexPath = indexPath
        return cell
    }

    func cell(buttonDidPressed indexPath: IndexPath){
     // your task on cell click
    }

}

You can also use closures in cell class alternative to protocol

  • Related