来自UICollectionView的按钮的索引路径

时间:2012-09-25 09:22:40

标签: objective-c ios6 uicollectionview

我试图:

- (IBAction)delete:(UIButton*)sender{
    NSIndexPath *indexPath = [self.collectionView indexPathForCell:(TourGridCell *)[[[sender superview]superview]superview]];
}

但NSLog显示单元格存在,但indexpath为零。

4 个答案:

答案 0 :(得分:26)

好的,这是:

- (IBAction)delete:(UIButton *)sender{
    NSIndexPath *indexPath = nil;
    indexPath = [self.collectionView indexPathForItemAtPoint:[self.collectionView convertPoint:sender.center fromView:sender.superview]];
}

答案 1 :(得分:2)

有时这是最简单的答案。我遇到与@Schmidt完全相同的问题,但是看到他的答案是使用indexPathForItemAtPoint:感到很沮丧,好像indexPathForCell:在某种程度上被破坏了,无法按预期使用。

然后我尝试了他的解决方案,但仍然有相同的结果:索引路径回来了。

解决方案:视图控制器的collectionView插座未连接到NIB中的UICollectionView实例(在故事板上)。在建立缺少的连接之后,两个方法(indexPathForCell:和indexPathForItemAtPoint)都按预期工作。

我知道其他开发人员有时会遇到这个问题,所以请将此作为提醒:问题可能不是您的代码本身,而是Interface Builder中的某些东西,如未连接的插座(或者只是令人困惑,与不再存在的东西连接的插座

答案 2 :(得分:1)

答案的快速版本

var indexPath: IndexPath? = nil
indexPath = collectionView.indexPathForItem(at: collectionView.convert(sender.center, from: sender.superview))

答案 3 :(得分:0)

另一种最好的方法是对UIButton进行子类化并为其添加NSIndexPath属性。 在中加载单元格时 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath方法 添加此声明。 yourCell.customButton.indexPath = indexPath;

并且

- (IBAction)delete:(UIButton *)sender  
{
  NSIndexPath *indexPath = sender.indexPath;
}