2013-03-05 22 views
13

Tôi cố gắng để viếtCách chọn một số mục trong UICollectionView sau lần tải đầu tiên?

[self collectionView:myCollectionView didSelectItemAtIndexPath:selectedIndexPath]

và của UICollectionViewCell chọn = YES trong viewDidLoad, và nó đã thực hiện phương pháp didSelectItemAtIndexPath, nhưng các tế bào không được chọn.

Tôi đã viết trạng thái đã chọn trong lớp con của (void)setSelected:(BOOL)selected của UICollectionViewCell. Sau khi xem được tải, chức năng chọn thủ công hoạt động. Nhưng tôi không thể để nó tự động chọn một số mục sau lần tải đầu tiên của khung nhìn.

Và tôi đã cố gắng để viết mã trong:

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

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath, tất cả không phải là OK.

tôi thấy nó lần đầu tiên chạy viewDidLoaddidSelectItemAtIndexPath, sau đó cellForItemAtIndexPath, nó có vẻ như rằng tôi could't lấy các tế bào trong indexPath (mà tôi biết) trước cellForItemAtIndexPath, bởi vì trước đó các tế bào không tồn tại. Vậy làm cách nào để chọn một số mục trong số UICollectionView sau khi tải lần đầu tiên?

Xin lỗi vì tiếng anh nghèo của tôi. Cảm ơn trước.

Trả lời

11

Không chắc chắn, nếu bạn có câu hỏi đúng, nhưng đây là giải pháp khả thi:

Ví dụ: viewWillAppear: làm

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

Gấu trong tâm trí, mà gọi 'selectItemAtIndexPath' lập trình KHÔNG gọi các phương pháp đại biểu có liên quan; bạn sẽ phải gọi cho họ bằng mã nếu bạn cần chúng.

+2

Cảm ơn bạn! Tôi đã làm việc nó ra! Tôi luôn luôn sử dụng mã sai: [tự collectionView: _tagsCollectionView didSelectItemAtIndexPath: selectedIndexPath] và cố gắng đặt nó ở khắp mọi nơi, không phải là selectItemAtIndexPath, vì vậy luôn luôn không hoạt động. – zgjie

+0

Khi chế độ xem của tôi được tải, phương pháp này phù hợp với tôi. Nhưng theo quan điểm của tôi, tôi có các ngón tay cái được chọn tự động – bashan

+0

Và vấn đề chính xác của bạn là gì? Câu hỏi ban đầu là về lượt tải đầu tiên của chế độ xem. – SAE

8

Trong trường hợp của tôi selectItemAtIndexPath không có hiệu lực sau reloadData, vì vậy tôi đã phải gọi nó là trong khối hoàn thành performBatchUpdates:

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

let indexPath = ... 

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

Cảm ơn. Tôi đã ở trong cùng một tình huống thực hiện hành động selectItem sau khi reloadData. Câu trả lời của bạn đã giải quyết được vấn đề của tôi. –

4

Swift 3

Thực hiện chức năng ghi đè này, nơi được collectionview của bạn được tạo ra . Giả sử rằng chúng tôi có 1 phần 1 hàng như câu chuyện trên 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)) 
     } 
    } 
Các vấn đề liên quan