1

我有以下代码,它有 2 个部分。我希望有 3 个单元格的第一部分有文本,而第二部分没有文本。问题是在第 2 节中的第 6 个左右的单元格之后,单元格重复了第 1 节中的文本。

所以我的单元格看起来像:第 1 部分 - 个人资料、联系人、设置;第 2 部分 - 空白 空白、空白、空白、空白、配置文件、联系人、设置。

我究竟做错了什么?

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if(section == 0) return 3;
    else return 9;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"LeftMenuCell";
    UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(indexPath.section == 0) {
    switch (indexPath.row) {
        case 0:
            cell.textLabel.text = @"Profile";
            break;
        case 1:
            cell.textLabel.text = @"Contacts";
            break;
        case 2:
            cell.textLabel.text = @"Settings";
            break;

        default:
            break;
    }

    } else {
         //nothing should appear in these cells
    }

    return cell;
}
4

4 回答 4

6

滚动时重复使用表格视图单元格,即dequeueReusableCellWithIdentifier 可以返回以前用于显示不同行的单元格。

因此,即使在其他情况下,您也必须明确设置内容:

} else {
    //nothing should appear in these cells
    cell.textLabel.text = @"";
}
于 2013-09-20T08:19:15.417 回答
1

这是由于小区重用造成的。cell.textLabel.text = @"";在不需要显示文本的条件下设置。

if(indexPath.section == 0) {
    //Your code

    // .... 

} else {
    cell.textLabel.text = @"";
}
于 2013-09-20T08:20:56.743 回答
0

当你分配单元格时使用这个

static NSString *CellIdentifier = @"LeftMenuCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
    cell=[[UITableViewCell alloc]initWithStyle: UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
于 2013-09-20T08:27:31.480 回答
0

细胞被重复使用。看到这个dequeueReusableCell

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

这是因为 Tableview Cell 被重用了,所以您需要 cell.textLabel.text = @"";在 else 条件下添加它。这意味着第二部分。

于 2013-09-20T08:29:20.327 回答