在 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