首页 文章

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

提问于
浏览
8

我搜索几篇文章,但我找不到我要找的东西 . 基本上,我想在每一行显示删除按钮,但我不想使用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 回答

  • 2
    • 添加布尔属性: @property BOOL didPressEdit;

    • UIButton 添加到 UITableViewCell

    • 按下编辑时, didPressEdit 变为 TRUEUITableView 重新加载,这样 cell.deleteButton.hidden = !didPressEdit; 使所有删除按钮可用

    • 按delete时,从数据源数组中删除对象,重新加载tableview

    希望这可以帮助

  • 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 {
    
    }
    
  • 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;
        }
    

相关问题