0

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

在两个单元格中,它们不能选择它们来编辑它们的内容,而是有一个正确的附件,一个 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 检查都是正确的。

有人以前见过这个或有任何线索吗?

4

2 回答 2

3

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

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

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

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

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

于 2012-04-07T07:04:45.687 回答
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;
}

它现在将保持不变

于 2012-04-07T04:19:52.703 回答