13

我试着写

[self collectionView:myCollectionView didSelectItemAtIndexPath:selectedIndexPath]

和 UICollectionViewCell 在 vi​​ewDidLoad 中的 selected=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第一次加载后选择一些项目呢?

对不起我糟糕的英语。提前致谢。

4

3 回答 3

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”不会调用相关的委托方法;如果需要,您必须在代码中调用它们。

于 2013-03-05T16:10:24.317 回答
9

在我的情况下selectItemAtIndexPath没有效果之后reloadData,所以我不得不在完成块中调用它performBatchUpdates

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

let indexPath = ...

collectionView.performBatchUpdates(nil) { _ in
  collectionView.selectItemAtIndexPath(indexPath, animated: false, scrollPosition: .None)
}
于 2016-03-23T18:40:29.940 回答
7

斯威夫特 3

实现这个覆盖函数,你的 collectionview 是在哪里创建的。假设我们有 1 个部分 1 行,例如 Instagram 故事。

 override func viewDidAppear(_ animated: Bool) {
        // Auto Select First Item
        self.myCollectionView.performBatchUpdates(nil) { _ in
            self.myCollectionView.selectItem(at: IndexPath(item: 0, section: 0), animated: false, scrollPosition: [.centeredHorizontally])
            self.collectionView(self.myCollectionView, didSelectItemAt : IndexPath(item: 0, section: 0))
        }
    }
于 2017-05-06T16:17:33.230 回答