0

重複の可能性:
ボタンをクリックして削除するスワイプのアクションを置き換えます

私は次のコードを持っています。

- (void) tableView: (UITableView *) tableView commitEditingStyle: (UITableViewCellEditingStyle) editingStyle forRowAtIndexPath: (NSIndexPath *) indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [appointments removeObjectAtIndex: indexPath.row];  // manipulate your data structure.
        [tableView deleteRowsAtIndexPaths: [NSArray arrayWithObject: indexPath]
                         withRowAnimation: UITableViewRowAnimationFade];
       NSLog(@"row deleted");  // Do whatever other UI updating you need to do.
    }
} 

このコードは、セルをスワイプすると実行されます。しかし、私が欲しいのは、カスタムテーブルビューセルのボタンを押すとこのコードが実行されることです。下のスクリーンショットでわかるように、テーブルビューに2つのボタンがあります。

ここに画像の説明を入力してください

ユーザーが「X」ボタンを押すと、セルをスワイプしたときのように削除ボタンが展開されます。セルに次のアクションをアタッチしています。

-(IBAction) deleteAppointment:(id) sender{
   //show swipe delete button
}

そして、次の方法でそれを私のcellForRowAtIndexに添付しました。

cell.deleteAppointment.tag = indexPath.row;
[cell.deleteAppointment addTarget:self action:@selector(deleteAppointment:) forControlEvents:UIControlEventTouchUpInside];
4

1 に答える 1

0

セルにボタン付きのaddTargetを追加し、次のようにすべてのボタンにタグを設定するだけです。

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

    /////your code
    UIButton *btnClose = [[UIButton alloc]initWithFrame:CGRectMake(270, 7, 20, 20)];
    btnClose.tag = indexPath.row;
    [btnClose setImage:[UIImage imageNamed:@"closeImage.png"] forState:UIControlStateNormal];
    [btnClose addTarget:self action:@selector(deleteAppointment:) forControlEvents:UIControlStateNormal];
    [cell addSubview:btnClose];
    return cell;
}

そして、メソッドでは次のようになります...

    - (IBAction)deleteAppointment:(id)sender {

            // here bellow code for swipe the close button in cell
            UIButton *btn = (UIButton *)sender;
            int SelectedRowNo = btn.tag;
            [UIView beginAnimations:nil context:NULL];
            [UIView setAnimationDuration:0.3];
            [btn setFrame:CGRectMake(btn.frame.origin.x - 50, btn.frame.origin.y, btn.frame.size.width, btn.frame.size.height)];
            [UIView commitAnimations];

            //// here bellow code for delete raw from table
            /*
             [appointments removeObjectAtIndex: SelectedRowNo];
             UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
             NSIndexPath *clickedButtonPath = [yourTableView indexPathForCell:clickedCell];
             [yourTableView deleteRowsAtIndexPaths: [NSArray arrayWithObject: clickedButtonPath]
             withRowAnimation: UITableViewRowAnimationFade];
             NSLog(@"row deleted");  // Do whatever other UI updating you need to do.
             */
}

これがお役に立てば幸いです。

于 2012-11-30T10:25:23.130 に答える