在 UICollectionView 中实现按钮点击

Posted

技术标签:

【中文标题】在 UICollectionView 中实现按钮点击【英文标题】:Achieve button click in UICollectionView 【发布时间】:2012-12-20 06:09:18 【问题描述】:

有没有办法从UICollectionViewCell 中的按钮获取按钮单击事件?我用笔尖填充集合视图,单元格有按钮,但它的动作没有被调用。我认为问题在于被调用的代表。我该如何解决这个问题?

我是如何创建的:

    添加了一个空笔尖,创建了一个集合视图单元格 添加了一个 .h 和 .m 文件,并将单元格 nib 的文件所有者作为创建的类 在课堂上写了一个动作。 将按钮连接到操作

有没有办法让我采取行动? 我做错了什么?

【问题讨论】:

你有FileOwner的功能吗?请尝试删除操作链接并重新连接。 关闭请求?为什么?哦好的已编辑 文件所有者是 nib 的类本身? 是的。这也是我可以连接插座的原因吗? 【参考方案1】:

通过从“对象”面板中拖动“集合视图单元格”在 Nib 中创建单元格非常重要。如果您使用 UIView 并只是在 Identity Inspector 中更改此单元格的类,则该操作将不起作用。

【讨论】:

这是我的确切问题。很高兴我找到了这个建议。【参考方案2】:

像这样添加按钮动作:

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


【讨论】:

【参考方案3】:

这里是 swift 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)

【讨论】:

以上是关于在 UICollectionView 中实现按钮点击的主要内容,如果未能解决你的问题,请参考以下文章

在 UICollectionViewCell 中实现 UICollectionView

如何在 UICollectionView 中实现页面之间的间距?

使用 Xib 创建 UICollectionView/UICollectionViewController 组件并在 UIViewController 中实现

如何使用 Swift 3 for iOS 在 ViewController.swift 中实现 UICollectionView

如何在winform中实现,一个按钮停止另一个按钮的事件

如何在没有选择按钮的情况下在 GridView 中实现全行选择?