2013-06-18 6 views
5

アイテム(indexPath.item)のインデックスをUICollectionViewに覚えようとしています。後で、ビューが置換されてから復元された後、その記憶されたアイテムにスクロールします。その項目の後にindexPathを再計算すると、indexPathUICollectionViewアイテムへのスクロール

indexPath is: <NSIndexPath 0x1d87b380> 2 indexes [0, 32] 
indexPath.item is: 32 

、およびindexPath.itemは、次のとおりです:

アイテム、indexPathを記憶し、indexPath.itemは

indexPath is: <NSIndexPath 0x1d8877b0> 2 indexes [0, 32] 
item is: 32 

私がしよう使用して記憶した場所にスクロールする:

NSIndexPath *iPath = [NSIndexPath indexPathForItem:i inSection:0]; 
[self collectionView scrollToItemAtIndexPath:iPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO]; 

を私はエラーが表示されます。

attempt to scroll to invalid index path 
+3

エラーメッセージに表示しようとしているインデックスパスを出力しますか?そうであれば、 '[section、row]'としましょう。 'NSLog'' [self.collectionView numberOfItemsInSection:section]; 'を試してみて – micantox

+1

マイマントキシンありがとう。 numberofItemsInSectionを印刷すると、スクロールに使用されたビューが古くなっていたことが明らかになりました。ビューを更新した後にscrollToItemAtIndexPathを使用したとき、それは機能しました! – kzia

+1

あなたはドットを置くことを忘れましたか?すなわち[self.collectionView scroll ...]ではなく、[self collectionView scroll ...](selfとcollectionViewの間の点に注意してください)?エラーメッセージにこの問題が正確に記載されているように見える – igrek

答えて

2

numberofItemsInSectionを印刷すると、スクロールに使用されたビューが古くなったことが明らかになりました。ビューを更新した後にscrollToItemAtIndexPathを使用したとき、それは機能しました!

10

あなたはindexPathにスクロールしようとする前に[self.collectionView reloadData]; を呼ぶのですか?

reloadDataが終了したときにindexPathを再配置したい場合は、このようなブロック内のコードを配置:scrollToItemAtIndexPathを呼び出す前に

[UIView animateWithDuration:0 
     animations: ^{ [self.collectionView reloadData]; } 
     completion:^(BOOL finished) { 
         NSIndexPath *iPath = [NSIndexPath indexPathForItem:i inSection:0]; 
         [self collectionView scrollToItemAtIndexPath:iPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO]; 
}]; 

、あなたも確認するために、セクション内の項目の数を確認することができiまたは同じエラーが発生します。

+1

私にも同じエラーが返されました。 –

関連する問題