0

そのセルにはカスタムのテーブルビューが1つあります。テーブルビューの各セルに2つのボタンを追加しています。最初のボタンを同時にクリックすると、同じセルの2番目のボタンの画像が変更されます。そのために私はととしてメソッドを持っていeditQuantityますCancelorder。@selを使用します。同じセルを変更する代わりに最初のボタンをクリックすると、別のボタンを変更するという問題が発生します。テーブルをスクロールすると、選択したすべてのボタンの損失が表示されます。

Here Is My Code--

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

simpleTableIdentifier = @"MenuNameCell";
    MenuNameCell *cell = (MenuNameCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
   if (cell== nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MenuNameCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
        NSLog(@"---------new cell agin");   
    }
       else
    {
        NSArray *arrayView = [cell.contentView subviews];
        for (UIView *vTemp in arrayView)
        {
            [vTemp removeFromSuperview];
        }

        NSLog(@"---No New Cell hiiii");

        // Setting Tag To UIButton
        _checkButton = (UIButton *)[cell.contentView viewWithTag:indexPath.row];
        _cancelButton = (UIButton *)[cell.contentView viewWithTag:indexPath.row];
    }
    // Creating Label Menu Name
    _nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(8, 11, 82, 21)];
    _nameLabel.backgroundColor = [UIColor clearColor];
    _nameLabel.text =  [_hotel._orderedMenus objectAtIndex:indexPath.row];

    // Creating Label Menu Cost
    _amountMenu   = [[UILabel alloc] initWithFrame:CGRectMake(167, 13, 44, 21)];
    _amountMenu.backgroundColor = [UIColor clearColor];
    _amountMenu.text  = [[_hotel._menuPrices objectAtIndex:indexPath.row] stringValue];

    // Creating Text Field For Order Quantity
    _textFieldQuantity = [[UITextField alloc] initWithFrame:CGRectMake(125,14,42,21)];
    _textFieldQuantity.userInteractionEnabled = NO;
    _textFieldQuantity.text = [[_hotel._selectedQuantity objectAtIndex:indexPath.row] stringValue];

    // Creating Button For Check Order
    _checkButton  = [UIButton buttonWithType:UIButtonTypeCustom];
    [_checkButton setFrame:CGRectMake(232, 13, 25, 28)];
    [_checkButton setTag:indexPath.row];
    _checkButton.titleLabel.tag = indexPath.row;
    [_checkButton setBackgroundImage:[UIImage imageNamed:@"edit.png"]forState:UIControlStateNormal];
    [_checkButton addTarget:self action:@selector(editQuantity:) forControlEvents:UIControlEventTouchUpInside];


    // Creating Button For CANCEL Order
    _cancelButton  = [UIButton buttonWithType:UIButtonTypeCustom];
    [_cancelButton setFrame:CGRectMake(265, 13, 25, 28)];
    [_cancelButton setBackgroundImage:[UIImage imageNamed:@"cancel.png"] forState:UIControlStateNormal];
    [_cancelButton setTag:indexPath.row];
    _cancelButton.titleLabel.tag = indexPath.row;
    [_cancelButton addTarget:self  action:@selector(cancelOreder:) forControlEvents:UIControlEventTouchUpInside];

    // Adding All To Content View
    [cell.contentView addSubview:_nameLabel];
    [cell.contentView addSubview:_amountMenu];
    [cell.contentView addSubview:_textFieldQuantity];
    [cell.contentView addSubview:_checkButton];
    [cell.contentView addSubview:_cancelButton];


    //objc_setAssociatedObject(_checkButton, iindex, indexPath,OBJC_ASSOCIATION_RETAIN );

    return cell;
  }


-(void)editQuantity:(id)sender{

    button = (UIButton *)sender;
    row = button.tag;
    col = button.titleLabel.tag;
    NSLog(@"Check Button index is %d",row);
    NSLog(@"cehck title is %d",col);
    _textFieldQuantity.userInteractionEnabled = YES;
    UIImage *buttonImage = [UIImage imageNamed:@"edit_over.png"];
    [_checkButton setBackgroundImage:buttonImage forState:UIControlStateNormal];
    UIImage *buttonImageCancel = [UIImage imageNamed:@"check.png"];
    [_cancelButton setBackgroundImage:buttonImageCancel forState:UIControlStateNormal];
    _cancelButton.tag =  0;

} 

-(void)cancelOreder:(id)sender{

    button = (UIButton *)sender;
    row = button.tag;
    NSLog(@"The Row Selected iS At Cancel Order ISSSS----%d", row);
    if (_cancelButton.tag ==  0){
        _textFieldQuantity.userInteractionEnabled = NO;
        UIImage *buttonImageCancel = [UIImage imageNamed:@"check_over.png"];
        [_cancelButton setBackgroundImage:buttonImageCancel  forState:UIControlStateNormal];
        UIImage *buttonImageCancel1 = [UIImage imageNamed:@"cancel.png"];
        [_cancelButton setBackgroundImage:buttonImageCancel1 forState:UIControlStateNormal];
        UIImage *buttonImage = [UIImage imageNamed:@"edit.png"];
        [_checkButton setBackgroundImage:buttonImage forState:UIControlStateNormal];
        _cancelButton.tag = 1;
    }
    else
    {
        UIAlertView *alert =  [[UIAlertView alloc] initWithTitle:@"iHomeDelivery" message:@"Do You Want To Cancel the Order" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [alert show];
        [alert release];
    }

}
4

2 に答える 2

0

ご覧のとおり、_checkButton、_nameLabel、_amountMenu、_textFieldQuantity、および_cancelButtonはすべて、ViewControllerクラスのインスタンス変数です。

cellForRowAtIndexPath:これらすべてに新しいオブジェクトを割り当てると、最後に表示されたセルのオブジェクトが参照されます。これらすべてが最後のセルのコンポーネントを指すことを意味します。したがって、_checkButtonと_cancelButtonの背景画像を変更すると、最後のセルのボタンに影響します。

また、cellForRowAtIndexPath:これらのボタンの作成中に、ボタンの背景画像を設定しているため、スクロールした後、ボタンの画像が変更されます。cellForRowAtIndexPath:は、スクロール中に非表示にされた後、その行が表示されるたびに呼び出されることを忘れないでください。

デキュー後にcellForRowAtIndexPath:のボタンの状態をリセットできるように、ボタンの状態を別の配列に維持する必要があります。

于 2012-12-26T07:23:08.217 に答える
0

問題は、任意のコントロールのデフォルトのタグ値が に設定され0ていて、_cancelButton.tag = 0;. 値を10_cancelButton.tag = 1;変更1してから に変更するだけ11です。

これはあなたの問題を解決します:)

于 2012-12-26T06:53:51.993 に答える