2012-11-25 32 views
7

Khi sử dụng UICollectionView với allowsMultipleSelection được đặt thành YES chỉ có thể chọn một tá mục. UICollectionViewDelegate ngừng gọi collectionView:didSelectItemAtIndexPath:.UICollectionView với nhiều lựa chọn sẽ không chọn nhiều hơn một chục mục

Có vẻ như rất ngẫu nhiên. Bạn có thể chọn một vài mục, cuộn xuống, chọn một số mục khác và tại một số điểm bạn không thể chọn thêm bất kỳ mục nào.

Khi ô nhỏ hơn, bạn dường như có thể chọn nhiều mục hơn. Ô càng lớn, bạn càng có thể chọn ít mục hơn trước khi nó ngừng hoạt động.

Trả lời

16

Tôi đã phát hiện ra rằng trong khi câu trả lời trước đó của tôi hoạt động, nó có thể do không gọi siêu. Trong khi tài liệu cho UICollectionReusableView không đề cập đến điều này, tài liệu cho UITableViewCell, có cùng phương pháp, thực hiện.

- (void)prepareForReuse 
{ 
    [super prepareForReuse] 
    // Your code here. 
} 

Cũ Trả lời:


Đây có thể là một lỗi với UICollectionView.

Điều đang xảy ra là các ô đã được chọn trước đó đang được sử dụng lại và duy trì trạng thái đã chọn. Chế độ xem bộ sưu tập không được đặt selected thành "KHÔNG".

Giải pháp là để thiết lập lại trạng thái được chọn trong prepareForReuse của tế bào:

- (void)prepareForReuse 
{ 
    self.selected = NO; 
} 

Nếu các tế bào tái sử dụng được chọn, xem bộ sưu tập sẽ thiết lập selected để "YES" sau prepareForReuse được gọi.

Đây là điều mà UICollectionView nên tự thực hiện. Rất may là giải pháp đơn giản. Thật không may tôi đã dành rất nhiều thời gian làm việc xung quanh lỗi này bằng cách theo dõi trạng thái lựa chọn của riêng tôi. Tôi đã không nhận ra lý do tại sao nó đã xảy ra cho đến khi tôi đang làm việc trên một dự án khác với các tế bào nhỏ hơn.

+0

Cảm ơn bạn, Luke! Tôi đồng ý, điều này giống như một lỗi, vì vậy tôi đã báo cáo lỗi: http://openradar.appspot.com/radar?id=2816402 – clozach

+0

@clozach: Tôi vừa cập nhật điều này; Tôi nghĩ rằng nó có thể được gây ra bởi không gọi siêu. Tài liệu không đề cập đến điều này, nhưng các tài liệu cho 'PrepareForReuse' của' UITableViewCell' không đề cập đến điều này. Nó có thể chỉ là một vấn đề tài liệu. – Luke

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