2013-06-18 30 views
5

Tôi đang cố gắng ghi nhớ chỉ mục cho một mục (indexPath.item) trong UICollectionView và sau đó, sau khi xem được thay thế và sau đó được khôi phục, để cuộn đến mục đã ghi nhớ đó.UICollectionView Cuộn đến một mục

Khi ghi nhớ mục, indexPath, và indexPath.item là:

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

Khi tính toán lại các indexPath sau cho mục đó, indexPath, và indexPath.item là:

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

tôi cố gắng để cuộn đến vị trí đã ghi nhớ bằng cách sử dụng:

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

Tôi nhận được lỗi:

attempt to scroll to invalid index path 
+3

Nó có in đường dẫn chỉ mục mà bạn đang cố truy cập vào thông báo lỗi không? Nếu nó có, và nó là, hãy nói, '[phần, hàng]'. Hãy thử 'NSLog'' [self.collectionView numberOfItemsInSection: section]; 'và cho chúng tôi biết – micantox

+1

Cảm ơn bạn micantox. In ấn numberofItemsInSection tiết lộ rằng chế độ xem được sử dụng để cuộn đã cũ. Khi tôi sử dụng scrollToItemAtIndexPath sau khi làm mới chế độ xem, nó đã hoạt động! – kzia

+1

bạn quên đặt dấu chấm? tức là "[self.collectionView scroll ..." không phải "[self collectionView scroll ..." (xin lưu ý một dấu chấm giữa self và collectionView)? Dường như thông báo lỗi nêu chính xác vấn đề này – igrek

Trả lời

2

Số in ấnNhững mụcInSection tiết lộ rằng chế độ xem được sử dụng để cuộn đã cũ. Khi tôi sử dụng scrollToItemAtIndexPath sau khi làm mới chế độ xem, nó đã hoạt động!

10

Bạn có gọi [self.collectionView reloadData]; trước khi cố gắng cuộn đến chỉ mụcPath?

Nếu bạn muốn chuyển nơi ở các indexPath khi reloadData kết thúc, đặt mã trong một khối như thế này:

[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]; 
}]; 

Trước khi gọi scrollToItemAtIndexPath, bạn cũng có thể kiểm tra số lượng các mục trong phần để đảm bảo i là hợp lệ, hoặc bạn vẫn sẽ nhận được cùng một lỗi.

+1

Vẫn còn ném lỗi tương tự cho tôi. –

Các vấn đề liên quan