0

我正在努力解决以下问题。

我有一个船选项的表格视图。每个选项(单元格)都有一个名称、一个价格和一个按钮,指示该选项是否已被选中(见附件截图)-

在此处输入图像描述

问题是,当我点击第 1 节中的几个选项时,我也会为最后一节中的单元格获得 button_pressed 状态。可能发生这种情况是因为细胞被重复使用了?

这是在点击单元格时调用的函数,以添加选项。

- (IBAction)cellButtonSelection:(id)sender {

float prezzoParziale;

UIButton * button = sender;
//NSLog(@"%@",button.superview.superview);
if ([button.superview.superview isKindOfClass:[CellOptions class]] ) {

    CellOptions * cellOpt =(CellOptions *)button.superview.superview;

    //BOOL selectionState = NO;
    cellOpt.selected =! cellOpt.selected;

    if(cellOpt.selected){
        //UIButton *button = cellOpt.button1;
        [button setImage:[UIImage imageNamed:@"checkedButton.png"] forState:UIControlStateNormal];
        prezzoParziale = [cellOpt.label2.text floatValue];
        [accessoriSelezionati addObject:cellOpt.label1.text];
        [accessoriSelezionatiPrezzi addObject: cellOpt.label2.text];

        NSLog(@"stampa: %@", accessoriSelezionati);


    }else{
        //UIButton *button = cellOpt.button1;
        [button setImage:[UIImage imageNamed:@"uncheckedButton.png"] forState:UIControlStateNormal];
        prezzoParziale = [cellOpt.label2.text floatValue] * -1;
        [accessoriSelezionati removeObject:cellOpt.label1.text];
        [accessoriSelezionatiPrezzi removeObject: cellOpt.label2.text];

    }


 [self updateTotal:prezzoParziale]; }

和.....

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

        CellOptions * cellOpt;
     cellOpt = [tableView dequeueReusableCellWithIdentifier:CellOption forIndexPath:indexPath];
     cellOpt.label1.text = [[[accessoriXtipologia objectForKey:tipologia] objectAtIndex:indexPath.row] valueForKey:@"nome"];
    cellOpt.label2.text = [[[[accessoriXtipologia objectForKey:tipologia] objectAtIndex:indexPath.row] valueForKey:@"prezzo"] stringValue];

    return cellOpt;

    }

编辑:现在它正在工作

在 cellForRowAtIndexPath 中添加:

cellOpt.selected = [accessoriSelezionati containsObject:cellOpt.label1.text];



            if (cellOpt.selected) {

                [cellOpt.button1 setImage:[UIImage imageNamed:@"checkedButton.png"] forState:UIControlStateNormal];
            }

            else {



            [cellOpt.button1 setImage:[UIImage imageNamed:@"uncheckedButton.png"] forState:UIControlStateNormal];

            }

            return cellOpt;
4

1 回答 1

2

是的,这是由于细胞重用。在cellForRowAtIndexPath中,除了设置标签之外,您还必须通过执行以下操作来设置选定状态:

cellOpt.selected = [accessoriSelezionati containsObject:cellOpt.label1.text];
于 2013-08-09T18:16:55.137 回答