2

当我按下编辑按钮时,我会在项目左侧看到圆形删除图标。当我按下单元格中的删除图标时,它会“转动”,但删除按钮没有显示,因此我的 commitEditingStyle 永远不会被调用,因为我没有可按的删除按钮。

只是为了好玩...我将单元格更改为 Insert 我得到加号图标...我按下它并调用 commitEditingStyle。

我不明白为什么我没有得到删除按钮。

我有一个 UIViewController 我在弹出窗口中显示。我正在添加一个 UITableView 来喜欢这样......

audioTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 44, self.view.frame.size.width, 303)];
audioTable.delegate = self;
audioTable.dataSource = self;
[self.view addSubview:audioTable];

我正在使用一个带有两个标签的自定义单元格来显示文本。

这是自定义单元格 initWithFrame ...

primaryLabel = [[UILabel alloc]initWithFrame:CGRectMake(25 ,8, 275, 25)];
primaryLabel.font = [UIFont systemFontOfSize:14];

secondaryLabel = [[UILabel alloc]initWithFrame:CGRectMake(25 ,28, 275, 25)];
secondaryLabel.font = [UIFont systemFontOfSize:12];

[self.contentView addSubview:primaryLabel];
[self.contentView addSubview:secondaryLabel];

[self.contentView sendSubviewToBack:primaryLabel];
[self.contentView sendSubviewToBack:secondaryLabel];

我在连接到编辑调用的视图控制器的工具栏中有一个删除按钮。这是我在编辑调用中所做的事情,因为我在单元格中得到了删除符号,所以它被调用得很好......

if([self.audioTable isEditing]) {
    [button setTitle:@"Edit"];
    [super setEditing:NO animated:NO];
    [self.audioTable setEditing:NO animated:YES];
} else {
    [button setTitle:@"Done"];
    [super setEditing:YES animated:NO];
    [self.audioTable setEditing:YES animated:YES];
}

我已经实现了以下...

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
     return UITableViewCellEditingStyleDelete;
}

-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    //i don't think i need to implement this really
    return YES;
}

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //do delete stuff
    }
}

就像我说的一切正常,按钮按下和所有工作......只是没有删除按钮。

4

7 回答 7

4

我不得不使用不同的机制来解决它。我做了一个测试,当我使用它时UITableViewController它工作正常。当我将 a 添加UITableView到 aUIViewController时,实现与 a 相同的UITableViewController操作,它不起作用。我不知道我错过了什么,但使用而UIViewController不是UITableViewController导致删除按钮不出现。

于 2012-08-24T14:27:33.180 回答
4

我遇到了同样的问题。问题是我的 tableView 的框架没有在弹出框内正确调整大小。实际上,删除按钮正在显示,但它超出了弹出框的范围,因此无法看到。

我通过确保tableView适当调整大小来解决此问题。对我来说,这意味着像这样设置 tableView autoresizingMask

self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

其他人能够通过切换到 a 来解决此问题的原因UITableViewController是它tableView已正确调整大小。

于 2013-04-24T14:51:52.510 回答
2

我知道您使用 a 修复了它,UITableViewController但在我的情况下我不能。

环顾四周,我刚刚在这里找到了答案,您需要更多管道才能完成工作。幸运的是它很容易。将此添加到UIViewController包含对您的引用的UITableView

// objc
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated:animated];
    [tableView setEditing:editing animated:animated];
}

// swift
override func setEditing(editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)
    self.tableView.setEditing(editing, animated: animated)
}
于 2016-07-01T17:35:14.560 回答
0

记得设置删除按钮的样式

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleDelete;
}
于 2013-11-18T16:49:24.720 回答
0

问题是您正在使用 addSubview: 将标签添加到单元格的内容视图中,并且当它们最后添加时,它们隐藏了单元格的其他部分。通过调用将它们推到后台:

[cell.contentView sendSubviewToBack:label];
于 2012-08-14T17:11:08.180 回答
0

UIViewController.editButtonItem在按钮栏中使用 (它会自动更改视图控制器的编辑属性)时,我遇到了同样的问题。当我使用带有 UITableView 的 UIViewController 时,我需要将 setEditing 委托给 tableview,例如

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)
    tableView.setEditing(editing, animated: animated)
}
于 2018-11-01T22:05:23.480 回答
0

如果您使用的是自定义表格视图而不是 TVController。您必须设置至少三个代表

斯威夫特 4.2

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .insert {

    } else if editingStyle == .delete {

    }
}


func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
    return .delete
}

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    return true
}

最重要的是在 viewDidload 中添加 'tableView.isEditing = true' :)

于 2019-05-14T23:35:08.687 回答