首次加载后如何在UICollectionView中选择一些项目?

时间:2013-03-05 16:03:16

标签: ios xcode uicollectionview uicollectionviewcell

我试着写

[self collectionView:myCollectionView didSelectItemAtIndexPath:selectedIndexPath]

在viewDidLoad中

和UICollectionViewCell的选择= YES,它确实实现了方法didSelectItemAtIndexPath,但未选择单元格。

我在UICollectionViewCell子类的(void)setSelected:(BOOL)selected中编写了所选状态。加载视图后,手动选择功能起作用。但是在视图第一次加载后我不能让它自动选择一些项目。

我试着写代码:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath,一切都不行。

我发现它首先运行viewDidLoaddidSelectItemAtIndexPath,然后是cellForItemAtIndexPath,似乎我无法获取indexPath中的单元格(我知道)在cellForItemAtIndexPath之前,因为在此之前该单元格不存在。那么如何在UICollectionView首次加载后选择一些项目?

抱歉我的英语不好。提前谢谢。

2 个答案:

答案 0 :(得分:11)

不确定,如果你的问题是正确的,但这是一个可能的解决方案:

例如viewWillAppear:

[self.collectionView reloadData];
NSIndexPath *selection = [NSIndexPath indexPathForItem:THE_ITEM_TO_SELECT 
                                             inSection:THE_SECTION];
[self.collectionView selectItemAtIndexPath:selection 
                                  animated:YES 
                            scrollPosition:UICollectionViewScrollPositionNone];

请记住,以编程方式调用'selectItemAtIndexPath'不会调用相关的委托方法;如果需要,你必须在代码中调用它们。

答案 1 :(得分:9)

在我的情况下,selectItemAtIndexPathreloadData之后无效,所以我不得不在performBatchUpdates的完成区中调用它:

collectionView.dataSource = ...
collectionView.delegate = ...

let indexPath = ...

collectionView.performBatchUpdates(nil) { _ in
  collectionView.selectItemAtIndexPath(indexPath, animated: false, scrollPosition: .None)
}