如何从代码中选择 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 的特定索引路径?