Is there a way I can get the button click event from a button inside a UICollectionViewCell
? I used a nib to populate the collection view, the cell has the button but its action is not getting called. I think the problem is with the delegate being called. How can I fix this?
How I created :
Is there a way I can get the action? What am I doing wrong?
Single selectionWhen the SelectionMode property is set to Single , a single item in the CollectionView can be selected. When an item is selected, the SelectedItem property will be set to the value of the selected item.
Go to the Storyboard and drag a Right Bar Button Item to right side of the Navigation Bar of the Collection View Controller. Select the Bar Button Item and go to the Attributes inspector. Change the Custom Item Value to Add in the Bar Button Item section.
Select the Main storyboard from the file browser. Add a CollectionView by pressing command shift L to open the storyboard widget window. Drag the collectionView onto the main view controller. Add constraints to the UICollectionView widget to ensure that the widget fills the screen on all devices.
A collection view delegate manages user interactions with the collection view's contents, including item selection, highlighting, and performing actions on those items. The methods of this protocol are all optional. When configuring the collection view object, assign your delegate object to its delegate property.
It is important that you create the cell in the Nib by dragging a "Collection View Cell" from the Objects panel. If you use an UIView and just change the class for this cell in the Identity Inspector then the action will not work.
Add the button action like this:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CellId" forIndexPath:[indexPath row]];
[[cell myButton] addTarget:self action:@selector(myClickEvent:event:) forControlEvents:UIControlEventTouchUpInside];
return cell;
}
- (IBAction)myClickEvent:(id)sender event:(id)event {
NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:_myCollectionArray];
NSIndexPath *indexPath = [_myCollectionArray indexPathForItemAtPoint: currentTouchPosition];
}
Here is swift 3.1 code
// make a cell for each cell index path
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
// get a reference to our storyboard cell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! BlueCircleViewCell
// Use the outlet in our custom class to get a reference to the UILabel in the cell
cell.bgImage.image = UIImage(named: items[indexPath.row])
cell.addButton.addTarget(self, action: #selector(addCircle(_:)), for: .touchUpInside)
// cell.backgroundColor = UIColor.cyan // make cell more visible in our example project
return cell
}
func addCircle(_ sender:UIButton){
//CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
let buttonPosition:CGPoint = sender.convert(.zero, to: self.collectionView)
let indexPath:IndexPath = self.collectionView.indexPathForItem(at: buttonPosition)!
onAddBlueCircle(indexPath: indexPath)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With