我试过了:
- (IBAction)delete:(UIButton*)sender{
NSIndexPath *indexPath = [self.collectionView indexPathForCell:(TourGridCell *)[[[sender superview]superview]superview]];
}
但NSLog的显示单元存在,但indexpath为零。
我试过了:
- (IBAction)delete:(UIButton*)sender{
NSIndexPath *indexPath = [self.collectionView indexPathForCell:(TourGridCell *)[[[sender superview]superview]superview]];
}
但NSLog的显示单元存在,但indexpath为零。
OK,那就是:
- (IBAction)delete:(UIButton *)sender{
NSIndexPath *indexPath = nil;
indexPath = [self.collectionView indexPathForItemAtPoint:[self.collectionView convertPoint:sender.center fromView:sender.superview]];
}
有时候这是一个最简单的答案。 我有完全相同的问题,因为@Schmidt,但很沮丧地看到,他的回答是使用indexPathForItemAtPoint:,仿佛indexPathForCell:莫名其妙地被打破,如预期无法使用。
然后我尝试他的解决方案,并且仍然有同样的结果:指数路径回来了零。
解决方案:视图控制器的出口的CollectionView未连接到在NIB的UICollectionView实例(在情节串连图板)。 使失踪连接后,这两种方法(indexPathForCell:和indexPathForItemAtPoint)担任预期。
我知道其他的开发者遇到这个问题有时,所以把这个作为一个提醒:这个问题可能没有你的代码本身,而是一些在Interface Builder像一个未连接的插座(或只是令人费解, 这是连接东西的出口不再存在 )。
答案斯威夫特版本
var indexPath: IndexPath? = nil
indexPath = collectionView.indexPathForItem(at: collectionView.convert(sender.center, from: sender.superview))
另一种最好的办法是继承的UIButton和NSIndexPath属性添加到它。 当加载在细胞
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
方法添加此语句。 yourCell.customButton.indexPath = indexPath;
和
- (IBAction)delete:(UIButton *)sender
{
NSIndexPath *indexPath = sender.indexPath;
}