2

私は間違いなくここに何かが欠けています。これはそれほど難しいことではありません。iPad の UITableView のアイテムのリストに基本的なスワイプ機能を実装して削除しようとしています。セルが左にスライドする場合を除いて、すべてが機能しているように見えますが、削除ボタンは空白だけです。以下は、適切な機能にあるものです。

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (self.state == AMListMenu && [indexPath row] > 1)
    {
        return YES;
    }

    return NO;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (self.state == AMListMenu && [indexPath row] > 1)
    {
        return UITableViewCellEditingStyleDelete;
    }

    return UITableViewCellEditingStyleNone;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }
}

編集:

ランダムなことを試すだけで、次のコードを追加しました。リスト セルをスワイプすると、作成した赤い削除ボタンが一瞬表示され、セルの右端からスライドします。そのため、iOS の外観から、セルの端から editAccessory ビューを配置しています。まだ理由を理解しようとしています。

- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
    MainMenuCell *cell = (MainMenuCell *)[tableView cellForRowAtIndexPath:indexPath];

    UIButton* btn = [[UIButton alloc]init];
    [btn setTitle:@"DELETE" forState:UIControlStateNormal];
    [btn setTitleColor:AMColorWhite forState:UIControlStateNormal];
    [btn setBackgroundColor:AMColorTradeMarkRed];
    [btn setFrame:CGRectMake(242, 0, 90, cell.frame.size.height)   ];

    [cell setEditingAccessoryView:btn];
    [cell.contentView addSubview:btn];
}
4

1 に答える 1