Đi bắt đầu bằng cách nói rằng tôi đã nhìn thấy những câu hỏi này:iOS: tế bào cellForRowAtIndexPath đang nhận được lẫn lộn
iOS: UITableView mixes up data when scrolling too fast
(custom) UITableViewCell's mixing up after scrolling
Items mixed up after scrolling in UITableView
Việc đầu tiên và cuối cùng có vẻ rất phù hợp cho vấn đề của tôi, tuy nhiên tôi khá chắc chắn rằng tôi có logic cho mỗi phần để xác định những gì sẽ xuất hiện trong các tế bào (dữ liệu), nhưng họ vẫn bị lẫn lộn.
Sau đây là mã có liên quan:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Note: the if (cell == nil) thing is no longer required in iOS 6
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
if (closestRenter != nil)
{
NSLog(@"CLOSEST RENTER!");
[self setupCellsWithClosestRenterCell:cell atIndexPath:indexPath];
}
else
{
NSLog(@"NO CLOSEST RENTER");
[self setupCellsWithNoClosestRenterCell:cell atIndexPath:indexPath];
}
if (indexPath.section == 0)
{
for (UIView *view in cell.contentView.subviews)
{
NSLog(@"WHAT THE HECK");
[view removeFromSuperview];
}
}
return cell;
}
thông tin có liên quan ở đây:
1) ClosestRenter là KHÔNG nil ... nó tồn tại. Vì vậy, mệnh đề else không bao giờ được thực hiện ... và đó là trường hợp.
2) Trong mã:
[self setupCellsWithClosestRenterCell:cell atIndexPath:indexPath];
Có một đơn giản:
if (indexPath.section == 0)
{
cell.textLabel.text = @"PLACE HOLDER";
}
else
{
// Populate the cell with data. (creates a view (with controller etc) and loads it into the cell)
}
3) Có 2 phần tại mọi thời điểm.
Vấn đề là phần 0 (phần đầu tiên) sẽ không có gì hơn chuỗi giữ chỗ đó. Phần 1 phải chứa các bản xem phụ tùy chỉnh của tôi (trong các ô mà nó thực hiện).
Mục 0 ban đầu chỉ có chuỗi giữ chỗ, tuy nhiên khi tôi cuộn xuống (và phần không còn hiển thị) và cuộn lên (nhanh) đôi khi có một ô dường như ngẫu nhiên từ phần 1 trong đó ... cái quái gì vậy? Làm sao? Tôi miễn cưỡng đổ lỗi cho việc tái sử dụng tế bào nhưng vào thời điểm này bên ngoài một cái gì đó thực sự ngớ ngẩn tôi không biết nó là gì.
Phần đáng lo ngại ở đây là ô trong phần 0 (chỉ có 1 hàng ở đó) không có phụ đề. Nhưng khi tôi di chuyển lên và xuống nhanh nó nhận được một (từ phần 1 rõ ràng) và sau đó tôi nhận được thông báo nhật ký "GÌ THE HECK" ...
Điều đáng nói đến là với vòng lặp for (một với những gì các thông điệp heck) không giải quyết vấn đề (vì nó loại bỏ các subviews không mong muốn) nhưng có phải là một cách tốt hơn. Bây giờ nó cảm thấy sai.
Bất kỳ ý tưởng nào?
(Hãy đánh dấu điều này là trùng lặp, nhưng tôi khá chắc chắn có điều gì đó khác đang diễn ra ở đây).
Cảm ơn.
Làm tốt lắm Jordan! Điều này đã cứu tôi rất nhiều thất vọng. –
NGỌT LAWD BABY CHÚA GIÊSU. +10000. – Kezzer