ios - 从整数(int 或 NSInteger)到 UICollectionView 的 NSIndexPath*

Posted

技术标签:

【中文标题】ios - 从整数(int 或 NSInteger)到 UICollectionView 的 NSIndexPath*【英文标题】:ios - going from an integer (int or NSInteger) to an NSIndexPath* for a UICollectionView 【发布时间】:2014-10-31 13:12:31 【问题描述】:

我正在尝试调用collectionView...scrollToItemAtIndexPath 将我的UICollectionView 滚动到第i 个单元格,其中i 是元素的索引。我的集合视图只有一个部分,当我离开另一个部分时,我总是调用dataArray[indexPath.item] 来获取 indexPath 中元素的数据。但是,我无法从整数中获取 indexPath。

[NSIndexPath indexPathForRow:] 仅适用于 UITableView

[NSIndexPath indexPathWithIndex:] 不返回带有部分的NSIndexPath

[NSIndexPath indexPathForItem:inSection:0] 返回一个长度为 0 的路径,当用于获取具有 [collectionView cellAtIndexPath:] 的单元格时,该路径返回 nil

知道我能做些什么来获得一个有效的索引路径,然后我可以用它来滚动我的UICollectionView? 假设我只有数据数组的NSInteger 索引。谢谢。

使用代码更新:

NSIndexPath* pathToCell = [NSIndexPath indexPathForItem:curIndex inSection:0];
    CustomCollectionViewCell* updatedCell = (CustomCollectionViewCell*)[self collectionView:self.collection cellForItemAtIndexPath:pathToCell];
    selectedContent = updatedCell.cellContentView;

    // scroll to cell and recenter cover on it
    [self.collection scrollToItemAtIndexPath:pathToCell atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:NO];

然后我使用单元格的位置在其顶部居中放置一个“封面”视图:

// Animate
CGPoint coverCenter = [childView convertPoint:selectedContent.center toView:parentView];

coverSelectDummy.center = coverCenter;
coverSelectDummy.imageView.image = selectedContent.imageView.image;
coverSelectDummy.imageLabel.text = selectedContent.imageLabel.text;
coverSelectDummy.alpha = 1.0;
coverSelectDummy.transform = CGAffineTransformIdentity;
coverSelectDummy.hidden = NO;

[self.view bringSubviewToFront:coverSelectDummy];

[UIView transitionWithView:coverSelectDummy duration:0.1f options: UIViewAnimationOptionCurveLinear animations:^(void)
 
     coverSelectDummy.alpha = 1.0;
     coverSelectDummy.transform = CGAffineTransformMakeScale(1.2, 1.2);

 
                completion:^(BOOL finished)
 
     // .... processing ....
 ];

【问题讨论】:

你能说明你是如何使用[NSIndexPath indexPathForItem:inSection:0]的吗?我想看看这个问题的所有相关代码 是的,如上所示。发生的事情是返回的 IndexPath 似乎存在,但它不会产生我作为整数传入的单元格。事实上,我看到的是封面视图转到集合视图的左上角,而不是特别是在任何单元格上,因为 selectedContent 是 nil 该代码不应该是[self.collection cellForItemAtIndexPath:pathToCell]; 还是我很困惑?甚至不清楚[self collectionView:] 是什么。 我同意 ***foe - 你的代码有错误 - 这很可能是错误。然后按照下面的答案就可以了。 【参考方案1】:

cellForItemAtIndexPath: 如果单元格不可见 (documentation) 则返回 nil。因此,如果您想滚动到当前不在屏幕上的项目,这是行不通的。如果我理解正确,你只是想滚动到某个地方,所以我认为你甚至不需要担心那个方法。

您应该使用创建一个 NSIndexPath 对象 indexPathForItem:inSection:,然后使用 scrollToItemAtIndexPath:atScrollPosition:animated: 滚动到该索引路径

因此,假设集合视图是相关视图控制器的属性,并且您有一个滚动位置变量在使用:

NSInteger itemToScrollTo = 10;
NSIndexPath *indexPathToScrollTo = [NSIndexPath indexPathForItem:itemToScrollTo inSection:0];
[self.collectionView scrollToItemAtIndexPath:indexPathToScrollTo atScrollPosition:scrollPosition animated:YES];

【讨论】:

那应该是 indexPathForItem:inSection:

以上是关于ios - 从整数(int 或 NSInteger)到 UICollectionView 的 NSIndexPath*的主要内容,如果未能解决你的问题,请参考以下文章

从'NSInteger'(又名'int')分配给'NSString *'的不兼容整数到指针转换;

不兼容的整数到指针的转换将“NSInteger”(又名“int”)发送到“NSInteger *”(又名“int *”)类型的参数

目标c:检查整数/整数/数字

指向分配给“NSInteger”(又名“int”)的整数转换的不兼容指针

int vs NSNumber vs NSInteger

编码一个 int 或 NSInteger 用于状态恢复