在不同部分的自定义TableCell中重复内容

时间:2015-07-03 08:25:51

标签: ios objective-c uitableview cell reuseidentifier

我有*UITableViewCell显示一段时间内的事件,某种日历。每个部分都是一周中的某一天,每个活动都是自定义 *NSArray。事件位于didSelectRowAtIndexPath内,并根据其日期和时间将这些事件分配给表的一个部分。

部分中的行数很好,但是当显示单元格时,其中一些单元格开始在其他部分的其他单元格中重复其内容,以覆盖其信息。此单元格也有指定的颜色,在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { CalendarDayCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CalendarDayCell"]; if (cell == nil) { NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@"CalendarDayCell" owner:self options:nil]; cell = [nibs objectAtIndex:0]; } CalendarEvent *ce = self.events[indexPath.row]; NSString *initHr = [self formatDateGetHour: ce.timestart]; ... sets cell info ... return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { ... UIColor *bgColor = [self lighterColorForColor:[self colorWithHexString:ce.color]]; CalendarDayCell *cell = (CalendarDayCell *)[_calendarTable cellForRowAtIndexPath:indexPath]; cell.container.backgroundColor = bgColor; ... } 方法中,单击时背景会更改为该颜色但与上面相同,其他部分的其他单元格也会更新其背景颜色。

我认为这与细胞重用有一定关系,但我无法找到我做错的事情。

PD:我是iOS新手,所以请随时索取更多代码,纠正我,等等。感谢您的建议。

- (void) calculateRowsInSections
{
    mondayEventsCount = 0, tuesdayEventsCount = 0, wednesdayEventsCount = 0, thursdayEventsCount = 0, fridayEventsCount = 0, saturdayEventsCount = 0, sundayEventsCount = 0;

    if (self.events.count) {
        for (CalendarEvent* ce in self.events) {
            if ([self getDayOfWeek : ce.timestart] == 2) mondayEventsCount++;
            else if ([self getDayOfWeek : ce.timestart] == 3) tuesdayEventsCount++;
            else if ([self getDayOfWeek : ce.timestart] == 4) wednesdayEventsCount++;
            else if ([self getDayOfWeek : ce.timestart] == 5) thursdayEventsCount++;
            else if ([self getDayOfWeek : ce.timestart] == 6) fridayEventsCount++;
            else if ([self getDayOfWeek : ce.timestart] == 7) saturdayEventsCount++;
            else if ([self getDayOfWeek : ce.timestart] == 1) sundayEventsCount++;
        }       
    }
}

以下是我如何为部分

中的行进行计算
{{1}}

有关正在发生的事情的一些图片:

Day 1 Monday

Day 2 Tuesday

2 个答案:

答案 0 :(得分:0)

看起来您应该在自定义单元类中实现-prepareForReuse方法并清理单元格中的内容。 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewCell_Class/#//apple_ref/occ/instm/UITableViewCell/prepareForReuse

也代替

if (cell == nil) {
    NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@"CalendarDayCell" owner:self options:nil];        
    cell = [nibs objectAtIndex:0];
}

最好以-viewDidLoad方法注册单元格:

[self.tableView registerNib:[UINib nibWithNibName:@"CalendarDayCell" bundle:nil] forCellReuseIdentifier:@"CalendarDayCell"];

答案 1 :(得分:0)

首先,在.h文件中创建CalendarDayCell *单元并重用单元对象。 第二件事,在 cellForRowAtIndexPath 中设置新值之前设置Nil。例如,设置

  

cell.label.text = @“”;

     

cell.imageview.image = Nil;

然后设置所需的文字。与 didSelectRowAtIndexPath 相同,在设置新颜色之前,首先设置清晰颜色,如:

  

cell.container.backgroundColor = [UIColor clearColor];

     

cell.container.backgroundColor = bgColor;

它可能对你有帮助。