How to add a delete button to Collection View Cell in Swift?

Right now I have a list of scrolling usernames using a Collection View of buttons. But I’d like to add overlapping delete buttons to each row. They’d need to be attached to the name buttons and scroll with them.

How can I add these buttons to my CollectionView?
(Also I’d like to skip the delete button on the first row for obvious reasons)

  • CloudKit - NSPredicate for finding all records that contain specified CKReference in a reference list
  • Why is main window of type double optional?
  • Zoom in on User Location- Swift
  • Creating a UIImage from a UIColor to use as a background image for UIButton
  • Using manager.request with POST
  • Function Array<Optional<T>> -> Optional<Array<T>>
  • User Selection Screen

    Current Code:

      //Add the cells to collection
      func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell: UsernameCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! UsernameCollectionViewCell
        cell.usernameLabel.text = userNames [indexPath.row]
        return cell
      }
    
      //Upon Selecting an item
      func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    
        if (indexPath.row == 0){
          self.performSegueWithIdentifier("newUserSegue", sender: self)
        }
        else {
          sendData(userNames[indexPath.row])
          self.dismissViewControllerAnimated(true, completion: nil)
        }
    
      }
    

    2 Solutions Collect From Internet About “How to add a delete button to Collection View Cell in Swift?”

    Got it working! Here’s how:

    1. I added a button to the cell in the Storyboard.
    2. Connected an outlet to the UICollectionViewCell class.
    3. Edited view controller code to:

      func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
      
        let cell: UsernameCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! UsernameCollectionViewCell
      
        cell.usernameLabel.text = userNames [indexPath.row]
      
        cell.deleteButton?.layer.setValue(indexPath.row, forKey: "index")
        cell.deleteButton?.addTarget(self, action: "deleteUser:", forControlEvents: UIControlEvents.TouchUpInside)
      
        // Remove the button from the first cell
        if (indexPath.row == 0){
          var close : UIButton = cell.viewWithTag(11) as! UIButton
          close.hidden = true
        }
      
        return cell
      }
      
      func deleteUser(sender:UIButton) {
      
        let i : Int = (sender.layer.valueForKey("index")) as! Int
        userNames.removeAtIndex(i)
        UserSelectCollection.reloadData()
      }
      

    Many thanks to JigarM for his examples on GitHub:
    https://github.com/JigarM/UICollectionView-Swift

    Why not create custom UICollectionViewCell in IB and just add button to it ?
    Register it to your collectionView with :

    - registerNib:forCellReuseIdentifier:
    

    You can use delegate or notification to process button tap.