0

これは以前は iOS 6 で機能していましたが、iOS 7 では機能しません。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    NSIndexPath *indexPath = [NSIndexPath indexPathForItem:1 inSection:0];
    [self.collectionView selectItemAtIndexPath:indexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone];
    NSArray *selectedPaths = self.collectionView.indexPathsForSelectedItems;
    NSAssert(selectedPaths.count == 1, @"viewWillAppear - Should be 1 but is %d", selectedPaths.count);
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSArray *selectedPaths = collectionView.indexPathsForSelectedItems;
    NSAssert(selectedPaths.count == 1, @"cellForItemAtIndexPath - Should be 1 but is %d", selectedPaths.count);
}

cellForItemAtIndexPath のアサーションは失敗します。

*キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了します。理由: 'cellForItemAtIndexPath - 1 である必要がありますが、0 です'

selectItemAtIndexPath:indexPath API を使用して viewWillAppear のアイテムを選択しましたが、cellForItemAtIndexPath が呼び出されるまでに、collectionView は何かが選択されたことを忘れています。理由はありますか?

4

1 に答える 1

3

どっ!

UICollectionViewController.clearsSelectionOnViewWillAppear
于 2013-10-08T02:51:47.540 に答える