UITableViewCell,显示滑动式删除按钮,无需滑动

时间:2015-10-20 16:22:59

标签: ios objective-c uitableview cocoa-touch delete-row

我搜索了几篇文章,但我找不到我要找的东西。基本上,我想在每一行显示删除按钮,但我不想使用UITableView.editing属性。 因为它看起来像这样;

enter image description here

会有“编辑”按钮。当用户点击它时,删除按钮看起来像滑动式。

是否有机会显示这样的删除按钮;

enter image description here

也许有一些方法可以解决它。否则,我将为此创建自定义视图。

感谢您的建议。

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return YES if you want the specified item to be editable.
    return YES;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {

       //Do something... 
    }
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView
           editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {

    return UITableViewCellEditingStyleDelete;

}

3 个答案:

答案 0 :(得分:2)

  • 添加布尔属性:@property BOOL didPressEdit;
  • UIButton添加到UITableViewCell
  • 按下修改后,didPressEdit变为TRUEUITableView重新加载,以便cell.deleteButton.hidden = !didPressEdit;使所有删除按钮可用
  • 按delete时,从数据源数组中删除对象,重新加载tableview

希望这有帮助

答案 1 :(得分:2)

-(NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewRowAction *moreAction2 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"Edit" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath){
        [self.heartCartTabel setEditing:NO];
        [self editButtonClicked:indexPath.row];
    }];
    moreAction2.backgroundColor = [UIColor blueColor];

    UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Delete"  handler:^(UITableViewRowAction *action, NSIndexPath *indexPath){

        [self tableView:self.heartCartTabel commitEditingStyle: UITableViewCellEditingStyleDelete forRowAtIndexPath:indexPath];
        //        [self.heartCartTabel deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    }];

    return @[deleteAction, moreAction2];
}

-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
    return YES;
}

- (IBAction)editButtonClicked:(int)indexNumber {

}

答案 2 :(得分:0)

您可以使用UITableView委托方法来请求这些操作。实现此方法如下:

  - (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
     UITableViewRowAction *modifyAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Delete" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
     // Respond to the action.
     }];
    modifyAction.backgroundColor = [UIColor blueColor];
    return @[modifyAction];
}

您当然可以返回多个操作并自定义文本和背景颜色。

还需要实现此方法以使行可编辑:

   - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath   {
        if (editingStyle == UITableViewCellEditingStyleDelete) {
            [self.objects removeObjectAtIndex:indexPath.row];
            [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.
        }
     }

您需要在编辑按钮上调用方法editActionsForRowAtIndexPath。

  -(void)buttonTouched:(id)sender{

        UIButton *btn = (UIButton *)sender;
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:btn.tag inSection:0];
        [self tableView:self.tableView editActionsForRowAtIndexPath:indexPath];
    }

  - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
        // Return NO if you do not want the specified item to be editable.
        return YES;
    }