Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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)

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

  }
like image 328
Justin Lewis Avatar asked Apr 13 '15 16:04

Justin Lewis


People also ask

How do I delete collections from cell view?

Build and Run the project and select the Edit Button. Select a few cells and press the Trash button to remove the items.

How to add subview in iOS Swift?

How To Add, Insert, Move, Remove Sub View In iOS Swift 1 Manage Swift View And Subview Example Demo. First let us look at this example in a video as below. ... 2 Manage Swift Subview Functions Introduction. parentViewObject.addSubview ( subView : UIView ) : Add a subview to parent view. ... 3 Manage Swift Subview Example Source Code.

How do I add a collection view to a Superview?

Step 1: Add a Collection View. In Main.storyboard, drag a collection view onto the view controller. Add constraints to have it align with the edges of the superview. Step 2: Assign the View Controller as the Collection View’s data source.

What is the difference between a collection view and Table View?

A collection view is an ordered layout display that allows for more customization than a tableview. I would prefer to use a collection view over a table view if I am displaying multiple images in a grid-like manner. If I just want to display a simple list, I would use a table view.


2 Answers

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

like image 65
Justin Lewis Avatar answered Oct 19 '22 10:10

Justin Lewis


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.

like image 1
CryingHippo Avatar answered Oct 19 '22 12:10

CryingHippo