Achieve button click in UICollectionView

青春壹個敷衍的年華 提交于 2019-12-18 02:57:41

问题


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 :

  1. Added an empty nib, created a collection view cell
  2. Added a .h and .m file and made the cell nib's files owner as the class created
  3. Wrote an action in the class.
  4. Connected the button to the action

Is there a way I can get the action? What am I doing wrong?


回答1:


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];

}



回答2:


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.




回答3:


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


来源:https://stackoverflow.com/questions/13966291/achieve-button-click-in-uicollectionview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!