我创建了一个带有UISwitch,UIStepper和内部两个标签的自定义UITableViewCell。
当我在模拟器中运行我的应用程序时,tableview列出了此自定义单元格的每个实例。我注意到当我在第一个单元格中切换开关并增加它的步进器(影响一个标签)时,第九个单元格会受到同样的影响。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableArray *items = [self arrayForSection:indexPath.section];
static NSString *CellIdentifier = @"Cell";
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if(indexPath.section == 0){
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
cell.notificationTitle.text = [items objectAtIndex:indexPath.row];
return cell;
}
我在这个tableview中也有两个部分,并设置第一个部分,以便选择样式关闭。
究竟发生了什么以及如何防止它发生?
答案 0 :(得分:1)
您要在哪里创建自定义单元格?你是在做这件事还是只是因为你在这里粘贴它时错过了它?
试试这个(希望您使用NIB文件创建自定义单元格):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *questionTableIdentifier = @"CustomCell";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:questionTableIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
cell.notificationTitle.text = [items objectAtIndex:indexPath.row];
return cell;
}
答案 1 :(得分:1)
当您使用此[tableView dequeueReusableCellWithIdentifier:questionTableIdentifier];
时,您实际上正在重用已经制作的单元格实例(如果有任何重复使用,则创建一个新实例)。 UITableViews以这种方式工作以节省内存。如果你有非常多的单元格,它仍然只会消耗大约相同的内存量,就好像只有足够覆盖屏幕一样。为了解决您的问题,您需要将细胞的状态保持在其他位置,然后是细胞本身。也许是tableviewcontroller或viewcontroller中的数据结构。然后在tableview要显示单元格时设置值。
如果你使用不可重复使用的细胞,那么你可以做这样的事情。
@property(nonatomic, strong)NSArray *cells;
- (id)init
{
self = [super init];
if ( self )
{
_cells = @[@[[[YourCell alloc] init],
[[YourCell alloc] init],
[[YourCell alloc] init]
],
[@[[YourCell alloc] init],
[[YourCell alloc] init],
[[YourCell alloc] init]]];
}
return self;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
return _cells[indexPath.section][indexPath.row];
}
假设你有2个部分,每个部分有3个单元格。