1

我创建了一个自定义 UITableViewCell,里面有一个 UISwitch、一个 UIStepper 和两个标签。

当我在模拟器中运行我的应用程序时,表格视图列出了这个自定义单元格的每个实例。我注意到,当我在第一个单元格中切换开关并增加它的步进器(影响一个标签)时,第九个单元格也会受到同样的影响。

- (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 中也有两个部分,并将第一个部分设置为关闭选择样式。

到底发生了什么以及如何防止它发生?

4

2 回答 2

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;
}
于 2013-11-06T19:35:24.617 回答
1

当您使用它时[tableView dequeueReusableCellWithIdentifier:questionTableIdentifier];,您实际上是在重用您的单元格的一个已经创建的实例(如果有任何要重用的实例,则创建一个新实例)。UITableViews 以这种方式工作是为了节省内存。如果您有大量单元格,它仍然只会消耗大约相同数量的内存,就好像只有足够覆盖屏幕一样。为了解决您的问题,您需要保持单元格的状态,然后是单元格本身。可能是您的 tableviewcontroller 或 viewcontroller 中的数据结构。然后在您的表格视图想要显示单元格时设置值。

如果你使用不可重复使用的单元格,那么你可以做这样的事情。

@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 个单元格。

于 2013-11-06T19:45:19.980 回答