您的当前位置:首页iOS关于提高获取NSIndexPath准确性的方法

iOS关于提高获取NSIndexPath准确性的方法

2024-12-14 来源:哗拓教育

在编写collectionView过程中,有时需要根据其对应的cell找到与之对应的indexpath进行数据处理,
常用的方法如下:

  • (NSIndexPath *)indexPathForCell:(UICollectionViewCell *)cell;

也就是:
NSIndexPath *indexpath =[self.collectionView indexPathForCell:cell];

但是有时会出现很奇怪的事情,就是collectionView存在,返回的cell也是存在的,但是获取到的indexpath却有时为空。

文档上对Return Value的解释如下:
The index path of the cell or nil if the specified cell is not in the collection view.

也就是说只要cell是不可见的时候就会返回nil,个人感觉“不可见”是指系统认为的不可见,实际上只要能点击触发事件且返回了cell,就侧面反应了cell是存在的。
所以说:

  • (NSIndexPath *)indexPathForCell:(UICollectionViewCell *)cell;

这个方法在某种特定的使用场景上存在隐患。

那有什么用一种办法能够提高返回indexpath的准确性呢?

答案肯定是有的,以下的方法就相对实用得多:

  • (NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point;

文档上对Return Value的解释如下:
An index path representing the row and section associated with point, or nil if the point is out of the bounds of any row.

综上
如果做点击等触控事件去通过cell获取indexPath:
那采用
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:cell.center];

准确性能大大提升,能在cell范围内点击中就会返回indexPath。

显示全文