UITableViewCell附件重复?

时间:2012-04-07 00:31:12

标签: iphone objective-c uitableview

在我的应用程序中,我有一个详细的视图,用户可以编辑个人的属性,他们的姓名,地址等。

在两个单元格中,它们没有能够选择它们来编辑它们的内容,而是有一个正确的附件,一个UISwitch,但有时候,它不一致,但它们会复制到我上一节中的其他单元格上。

我用细梳扫描了我的代码几十次,找不到该死的原因。什么可能导致这个?以下是我用于在单个单元格上创建UISwitch的代码:

if (indexPath.section == 0 && indexPath.row == 1) 
{
    cell.textLabel.text = @"Confirmed";

    //Make the cell unselectable
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    //Create and add uiswitch
    confirmedSwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
    [confirmedSwitch addTarget:self action:@selector(switchConfirmedStatus:) forControlEvents:UIControlEventValueChanged];
    [confirmedSwitch setOn:[venue.isConfirmed boolValue]];
    cell.accessoryView = confirmedSwitch;
}

所以你希望它只显示在那个单元格上,看到那些奇怪的代码?我检查了我的if语句,并且我的所有括号indexPath检查都是正确的。

之前有人看过这个或有任何线索吗?

2 个答案:

答案 0 :(得分:3)

问题在于reusability中的UITableView个问题。您可能对所有单元格使用相同的identifier,这会导致cellForRowAtIndexPath在其他行中实现(向上和向下滚动时)。

当您使用tableView开发应用程序时,这是一个常见问题,而StackOverflow上有很多这样的问题。

作为一般解决方案,您需要执行其中任何一项。

  1. 为每个单元格指定dequeueReusableCellWithIdentifier时使用不同的标识符。这很简单,您只需要为它们分配不同的标识符。

  2. 对您UITableViewController进行子类化,并创建自己的CustomTableViewController,它将在cell中实现必要的组件。我相信您需要覆盖set Layout Subviews方法。

答案 1 :(得分:0)

在视图中出现一个数组,并为此行添加对象0,为所有其他行添加1,然后在cellForRowAtIndexPath中检查数组在该索引处是否为0,如果它已经放置了切换,否则为nill ..

for(int i =0;i<10;i++)
{
    if(i==1)
    {
        [arrayForSwitch addObject:@"0"];
    }
    else
    {
        [arrayForSwitch addObject:@"1"];
    }
}

然后在cellForRowAtIndexPath写入条件

if([arrayForSwitch objectAtIndex:indexPath.row isEqualToString:@"0"])
{
    cell.accessoryView = confirmedSwitch;
}
else
{

    cell.accessoryView =UITableViewCellAccessoryNone;
}

它现在将保持不变