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 に答える