0

ラベルとボタンを使用してカスタム tableView を作成しました。セルのボタンをクリックすると、そのセルのラベル テキストのみを変更したい。私の問題は、ボタンをクリックすると、他のセルの対応するラベルも変更されることです。これが私のコードです

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier=@"CellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];

if (cell == nil) { cell = [[[UITableViewCell alloc]
                            initWithStyle:UITableViewCellStyleDefault 
                            reuseIdentifier: CellIdentifier] autorelease];





        UILabel *labelOne = [[UILabel alloc]initWithFrame:CGRectMake(70, 10, 100, 20)];
        labelOne.tag = 100;
        labelOne.backgroundColor=[UIColor clearColor];
        labelOne.font=[UIFont systemFontOfSize:14];
        [cell.contentView addSubview:labelOne];
        [labelOne release];

        UIButton *minusbutton=[[UIButton alloc]initWithFrame:CGRectMake(152, 5, 15, 20)];

        minusbutton.backgroundColor=[UIColor clearColor];
        [minusbutton addTarget:self action:@selector(DecreaseTickets:) forControlEvents:UIControlEventTouchUpInside];
        [minusbutton setTitle:@"-" forState:UIControlStateNormal];
        [minusbutton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [minusbutton setBackgroundImage:[UIImage imageNamed:@"button-green1.png"] forState:UIControlStateNormal];
        [cell.contentView addSubview:minusbutton];
        [minusbutton release];


        UILabel *quantity = [[UILabel alloc]initWithFrame:CGRectMake(170, 5, 20, 20)];
        quantity.tag = 103;
        quantity.backgroundColor=[UIColor clearColor];
        quantity.font=[UIFont systemFontOfSize:12];
        [cell.contentView addSubview:quantity];
        [quantity release];

        UIButton *addbutton=[[UIButton alloc]initWithFrame:CGRectMake(192, 5, 15, 20)];

        addbutton.backgroundColor=[UIColor clearColor];
        [addbutton addTarget:self action:@selector(IncreaseTickets:) forControlEvents:UIControlEventTouchUpInside];
        [addbutton setTitle:@"+" forState:UIControlStateNormal];
        [addbutton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [addbutton setBackgroundImage:[UIImage imageNamed:@"button-green1.png"] forState:UIControlStateNormal];
        [cell.contentView addSubview:addbutton];
        [addbutton release];


        UILabel *labelTwo = [[UILabel alloc]initWithFrame:CGRectMake(260, 10, 140, 20)];
        labelTwo.tag = 101;
        labelTwo.backgroundColor=[UIColor clearColor];
        labelTwo.font=[UIFont systemFontOfSize:14];
        labelTwo.textColor=[UIColor colorWithRed:0.25098 green:0.447059 blue:0.07451 alpha:1];
        [cell.contentView addSubview:labelTwo];
        [labelTwo release];


        UILabel *label3 = [[UILabel alloc]initWithFrame:CGRectMake(70, 30, 230, 30)];
        label3.tag = 102;
        label3.backgroundColor=[UIColor clearColor];
        label3.numberOfLines=2;
        label3.font=[UIFont systemFontOfSize:12];
        [cell.contentView addSubview:label3];
        [label3 release];


}


    UILabel *labelOne = (UILabel *) [cell.contentView viewWithTag:100];
    NSString *ss2=[[NSString alloc]initWithFormat:@"%@",[[eventTicketListArray objectAtIndex:indexPath.row ]tit] ];

    labelOne.text = ss2;    

    UILabel *labelTwo = (UILabel *) [cell.contentView viewWithTag:101];
    labelTwo.text = [[NSString alloc]initWithFormat:@"%@",[[eventTicketListArray    objectAtIndex:indexPath.row ]price] ];

    UILabel *label3 = (UILabel *) [cell.contentView viewWithTag:102];
    label3.text=[[NSString alloc]initWithFormat:@"%@",[[eventTicketListArray objectAtIndex:indexPath.row ]desc ] ];

    UILabel *label4 = (UILabel *) [cell.contentView viewWithTag:103];
    label4.text=[[NSString alloc]initWithFormat:@"%d",qty];
}


return cell;

}

   Initially qty=0

addbutton をクリックすると、そのセルの数量が増えるようになりました。ここに私のボタンクリックイベントがあります

   -(void)IncreaseTickets:(id)sender{

NSIndexPath *indexPath =[ticketTable indexPathForCell:(UITableViewCell *)[[sender superview] superview]];

//NSUInteger row = indexPath.row;
  UITableViewCell *currentCell = (UITableViewCell *)[[sender superview] superview] ;

UILabel *label4 = (UILabel *) [currentCell.contentView viewWithTag:103];
label4.text=[[[NSString alloc]initWithFormat:@"%d",qty++] ;

//NSLog(@"%d",row);

[ticketTable reloadData];

}

しかし問題は、ボタンをクリックすると、すべてのセルの数量が増加することです。やり方を教えてください。どんな助けでも大歓迎です。

4

2 に答える 2

0

このような条件を設定します.. グローバル変数 NSUInteger myRow に設定します。

 myRow = indexPath.row;//Set Selected index path.

cellForRowAtIndexPath セット条件で。

 if(myRow == indexPath.row)
 {
     NSUInteger newqty = qty + 1;
     UILabel *label4 = (UILabel *) [cell.contentView viewWithTag:103];
     label4.text=[[NSString alloc]initWithFormat:@"%d",newqty];
 }
 esle
 {
     UILabel *label4 = (UILabel *) [cell.contentView viewWithTag:103];
     label4.text=[[NSString alloc]initWithFormat:@"%d",qty];
  }

そのためのロジックを設定します。

于 2012-04-17T13:39:45.470 に答える
0

あなたが電話するとき

 [ticketTable reloadData];

すべてのデータがリロードされ、テーブルが再び初期化されます

UITable マジックは、割り当てられたいくつかのセル (必要なセルの最小数: 画面上で一度に表示可能なセル) を再利用することであり、通常はテーブル データで NSArray を使用して、スクロールするときに新しいデータ設定でそれらを再利用する必要があります。デリゲート...

そして:qtyはどこで定義されていますか?それはグローバル変数のようで、すべてのセルに1つではありません...

アップルのサンプルコードまたはチュートリアルを読んだほうがいいでしょう

于 2012-04-17T13:37:10.413 に答える