在我的应用程序中,我有一个详细的视图,用户可以编辑个人的属性,他们的姓名,地址等。
在两个单元格中,它们没有能够选择它们来编辑它们的内容,而是有一个正确的附件,一个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检查都是正确的。
之前有人看过这个或有任何线索吗?
答案 0 :(得分:3)
问题在于reusability
中的UITableView
个问题。您可能对所有单元格使用相同的identifier
,这会导致cellForRowAtIndexPath
在其他行中实现(向上和向下滚动时)。
当您使用tableView
开发应用程序时,这是一个常见问题,而StackOverflow上有很多这样的问题。
作为一般解决方案,您需要执行其中任何一项。
为每个单元格指定dequeueReusableCellWithIdentifier
时使用不同的标识符。这很简单,您只需要为它们分配不同的标识符。
对您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;
}
它现在将保持不变