0

我已经坚持这个问题好几天了,我已经调试了很多次,无法弄清楚出了什么问题。我有一个包含三个部分的 UITableView。我想将按钮作为附件视图和 UILabel 作为 detailText 添加到第二部分。首次加载 View 时看起来还不错。 在此处输入图像描述

但是滚动它之后,它变成了在此处输入图像描述

几个滚动后,它会冻结(而不是崩溃)。以下是我的代码,任何建议将不胜感激。

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 3;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (section==0) {
        return self.status.count;
    }
    else if (section==1)
        return self.overrideCtrl.count;
    else
        return self.levelStatus.count;
    // Return the number of rows in the section.
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MenuCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    NSLog(@"section %@",indexPath);
    if (indexPath.section == 0) {
        cell.textLabel.text = [self.status objectAtIndex:indexPath.row];
        NSLog(@"Status %@",cell.textLabel.text);
    }
    else if (indexPath.section == 1) {
        cell.textLabel.text = [self.overrideCtrl objectAtIndex:indexPath.row];
        cell.detailTextLabel.text =[NSString stringWithFormat:@"00:%02d",[[self.timeLeftArray objectAtIndex:indexPath.row] intValue]];//[[self.timeLeftArray objectAtIndex:indexPath.row] stringValue];
        cell.accessoryView=[self.checkButtonArray objectAtIndex:indexPath.row];
        NSLog(@"override %@",cell.textLabel.text);

    }else{
        cell.textLabel.text = [self.levelStatus objectAtIndex:indexPath.row];
        NSLog(@"level %@",cell.textLabel.text);

    }
    return cell;
}

谢谢!

4

2 回答 2

0

这个问题在 SO 上有很多介绍,这是因为单元重用。您需要将其他部分的 accessoryView 设置为 UITableViewCellAccessoryNone,否则,用于第一个部分的单元格可能会在另一个部分中使用,并且仍然具有其附件视图。

于 2013-06-03T15:47:35.377 回答
0

你只有 1 CellIdentifier。每个部分都应该有一个不同的部分。

于 2013-06-03T15:48:14.997 回答