在UICollectionView中实现button点击

有没有一种方法可以从UICollectionViewCell的button获取button单击事件? 我用一个笔尖来填充集合视图,单元格有button,但是它的动作没有被调用。 我认为问题在于代表被调用。 我怎样才能解决这个问题?

我如何创build:

  1. 添加一个空的笔尖,创build一个集合视图单元格
  2. 添加了一个.h和.m文件,并创build了单元格笔尖的文件所有者
  3. 在class上写了一个动作。
  4. 将button连接到该操作

有什么办法可以得到这个动作吗? 我究竟做错了什么?

像这样添加button动作:

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

通过拖动“对象”面板中的“集合视图单元”,在笔尖中创build单元格很重要。 如果您使用UIView,只需在Identity Inspector中更改此单元的类,则该操作将不起作用。

这里是快速的3.1代码

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