如何从代码中选择 UICollectionView 的项目/单元格

Posted

技术标签:

【中文标题】如何从代码中选择 UICollectionView 的项目/单元格【英文标题】:How to select item/cell of UICollectionView from code 【发布时间】:2012-12-13 12:19:48 【问题描述】:

我在我的应用中实现了UICollectionView。我的问题是我需要选择(就像用户点击它一样)一个单元格programmatically。 方法:

- (void)selectItemAtIndexPath:(NSIndexPath *)indexPath 
                     animated:(BOOL)animated 
               scrollPosition:(UICollectionViewScrollPosition)scrollPosition

这是UICollectionView 类的一部分,我不需要调用它,因为这个方法不会调用:

- (void)collectionView:(UICollectionView *)collectionView 
        didSelectItemAtIndexPath:(NSIndexPath *)indexPath

它只是将单元格的selected 属性设置为YES

【问题讨论】:

选择单元格后自己调用方法怎么样?你可以调用 [self collectionView:yourView didSelectItemAtIndexPath:yourIndexPath]; 也许这个答案会对你有所帮助***.com/questions/13177201/… @ДилянаТодорова 是的。谢谢!我知道didSelectItemAtIndexPath 一个,但我正在寻找一种不属于UICollectionView Delegate Protocol 的方法。我想到了。现在一切正常。 【参考方案1】:

是的,这是正确的行为。 [selectItemAtIndexPath:animated:scrollPosition:] says 的文档:

此方法不会导致任何与选择相关的委托方法 被调用。

【讨论】:

【参考方案2】:

我正在调用[self collectionView:yourView didSelectItemAtIndexPath:yourIndexPath] 以编程方式选择一个单元格。但在方法中,单元格始终为零。当用户选择一个单元格时,这非常有效。

【讨论】:

或者你可以使用swift:collectionView.delegate?.collectionView!(collectionView, didSelectItemAtIndexPath: someIndexPath) 这行得通,尽管直接调用委托方法是一种不好的做法(集合视图应该按照 Apple 的建议在其委托上调用该方法)。正如@leviathan 提到的“[selectItemAtIndexPath:animated:scrollPosition:]”不会调用委托方法,所以有更好的方法来解决这个问题。【参考方案3】:

首先,您需要使目标单元格可见,否则[yourCollectionView cellForItemAtIndexPath:yourIndexPath] 总是返回 nil。

// scroll to the cell
[yourCollectionView scrollToItemAtIndexPath:yourIndexPath
                           atScrollPosition:UICollectionViewScrollPositionBottom 
                                   animated:NO];

// call delegate method
[self collectionView:yourCollectionView didSelectItemAtIndexPath:yourIndexPath];

// now you have selected the cell and can do anything to it in the delegate method :-) 

【讨论】:

我的单元格始终可见,但 cellForItemAtIndexPath 始终返回 nil(即使调用 scrollToItemAtIndexPath

以上是关于如何从代码中选择 UICollectionView 的项目/单元格的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 中的 UICollectionView 如何设置选择以将数据从当前视图传递到另一个视图

如何检查 UICollectionView 有图像

如何从选定的 UICollectionView 单元格中获取数据?

默认情况下,如何选择 UICollectionView 的特定索引路径?

从 UICOLLECTIONViEW 选择的索引objective-c打开PDF文件

如何将视频从 ALAsset 显示到 UICollectionview Cell