2012-05-03 30 views
5

chúng ta đều biết rằng các tế bào trong uitableview có thể được resued, nhưng tôi thấy một số kết quả lạ. tôi đang tạo một ô tùy chỉnh, mỗi ô có 4 cột, mỗi cột có một hình ảnh vì vậy định dạng giống như thế này | img | img | img | img | sau khi ô được trả về, tôi định cấu hình từng ô, ví dụ sẽ định cấu hình cột đầu tiên thành hình 1, sau đó cột thứ hai sang hình ảnh khácios uitableview uitableviewcell tái sử dụng có dữ liệu cũ

bây giờ giả định rằng tôi chỉ có thể hiển thị hai hàng tại một thời điểm trong bảng :

|a0|a1|a2 |a3 | 
|b4|b5|b6 |b7 | 
------cell c not visible to user------ 
|c8|c9|c10|c11| 

như người dùng cuộn xuống, cột 'a' (a0-a3) ở trên, sẽ trở nên vô hình, và như xa tôi biết rằng tế bào trở nên vô hình sẽ được tái sử dụng cho cột c

ví dụ trên hoạt động tốt, nếu tôi hoàn toàn có thể chiếm tất cả các ô/hàng, tức là tôi có tổng cộng 12 hình ảnh.

nhưng nếu tôi có nói 10 hình ảnh (hàng cuối cùng sẽ được lấp đầy chỉ với 2, và hai người còn lại là trống rỗng, giống như như sau:

|a0|a1|a2 |a3 | 
|b4|b5|b6 |b7 | 
------row/cell 'c' not visible to user------ 
|c8|c9|empty|empty| 

Tuy nhiên, vấn đề nảy sinh, khi tôi di chuyển lên đến thấy tế bào/hàng 'c' tôi có hình ảnh sau đây:

|a0|a1|a2 |a3 | 
------row/cell 'a' not visible to user------ 
|b4|b5|b6 |b7 | 
|c8|c9|a2|a3| 

thông báo rằng hai cột cuối cùng hàng/cell c của nên để trống, nhưng được thể hiện a2 và a3 thay

Tôi có thể sửa lỗi này bằng cách nào? tôi đang nghĩ về một cách thủ công để làm điều này, tức là bằng cách kiểm tra xem tôi có nên loại bỏ các lượt xem không cần thiết, vv khi tái sử dụng, nhưng có thể phức tạp hơn.

có cách nào chúng tôi có thể yêu cầu ô trả lại quên nội dung của nó hay tôi phải tự làm điều này?

cảm ơn

Trả lời

7

Gần đây tôi đã gặp sự cố tương tự. Ghi đè lên PrepareForReuse sau khi lớp con của ô xem bảng đã sửa nó. Có câu trả lời từ here

+0

Xin lỗi bạn đã gửi câu hỏi cho tác giả hoặc cộng đồng gốc: Đọc tài liệu dành cho nhà phát triển của Apple tại https://developer.apple.com/documentation/uikit/uitableviewcell/1623223-prepareforreuse it to no đối phó với các tài liệu liên quan đến nội dung trong preparForReuse, nhưng thay vào đó là cellForRowAt. Có ai có bất kỳ giải thích nào về lý do tại sao câu trả lời được chấp nhận mâu thuẫn với tài liệu chính thức không? –

9

Bạn phải "tự làm". Bất cứ khi nào một UITableViewCell được tái sử dụng, nó vẫn giữ lại nội dung trước đó của nó. Nếu bạn muốn nó được thiết lập lại/xóa, bạn đã làm điều này bằng tay.

Trong tùy chỉnh UITableViewCell, bạn có thể ghi đè prepareForReuse và đặt lại bất kỳ nội dung nào bạn muốn hoặc thực hiện khi đặt nội dung mới.

Trong trường hợp của bạn, đặt thuộc tính image của UIImageView thành nil trong tất cả bốn cột sẽ hoạt động.

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