滚动UITableView后更新自定义按钮图像

时间:2011-11-21 19:07:27

标签: iphone objective-c ios ipad uikit

我正在访问一个自定义复选框,我已在项目中将其用作自定义按钮,并尝试在我的表格视图单元格中访问它。

目前,它正确地提示按钮,并且工作正常,除了我滚动我的tableview,然后对按钮进行任何进一步更改(登记或结帐),按钮图像将覆盖较旧的图像,而不是更新绘图。

我只是很好奇,有没有解决这个问题?

我的代码看起来像这样:

我的cellForRowAtIndexPath代码如下所示:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

                static NSString *CellIdentifier = @"CustomTableCell";

                CustomTableCell *cell = (CustomTableCell *)
                [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

                if (cell == nil) {

                    [[NSBundle mainBundle] loadNibNamed:@"CustomTableCell" 
                    owner:self options:nil];

                     cell = tableCell;

                    self.tableCell = nil;
                }

                CheckBox *chkBox = [[CheckBox alloc] init];
                chkBox.frame = CGRectMake(10.0, -10.0, 50.0, 70.0);
                [cell.contentView addSubview:chkBox];
                [chkBox release];

                cell.modelLabel.text = 
  [[[[[self regData] ShoppingCart] objectForKey:@"Cart"] 
  valueForKey:@"Model"] objectAtIndex:indexPath.row];

                // Configure the cell...
                return cell;
            }

我还没有实现didSelectRowAtIndexPath方法,因为该方法假设将查看器带到更新的屏幕并提供更多信息。

1 个答案:

答案 0 :(得分:1)

您正在做的是每次显示单元格时都添加复选框,无论它是新单元还是重用单元格。

您不希望每次都这样做:

CheckBox *chkBox = [[CheckBox alloc] init];
chkBox.frame = CGRectMake(10.0, -10.0, 50.0, 70.0);
[cell.contentView addSubview:chkBox];
[chkBox release];

只有当它是一个新的单元格时才这样做...但是通过将复选框添加为子视图然后释放它,无论如何你都会失去对它的访问权限。要访问它,您需要迭代单元格的子视图,找到类型复选框,然后查看是否已选中。 如果您的CustomTableCell具有您设置的Checkbox属性会更好,因此您可以轻松访问它。