UITableView删除按钮没有出现

时间:2012-08-14 16:25:11

标签: ios uitableview ipad editing

当我按下编辑按钮时,我会在项目左侧看到圆形删除图标。当我按下单元格中的删除图标时它会“转”但删除按钮没有显示,所以我的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
    }
}

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

7 个答案:

答案 0 :(得分:4)

我必须使用不同的机制解决它。我做了一个测试,当我使用UITableViewController时它运行正常。当我向UITableView添加UIViewController时,执行与UITableViewController相同的操作时,它不起作用。我不知道我错过了什么,但使用UIViewController而不是UITableViewController导致删除按钮不显示。

答案 1 :(得分:4)

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

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

self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

其他人可以通过切换为UITableViewController来解决此问题的原因是因为其tableView已正确调整大小。

答案 2 :(得分:2)

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

环顾四周,我找到了答案here,你需要更多的管道来完成工作。幸运的是它很容易。将其添加到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)
}

答案 3 :(得分:0)

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

将它们推入后台
[cell.contentView sendSubviewToBack:label];

答案 4 :(得分:0)

请记住设置删除按钮的样式

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

答案 5 :(得分:0)

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

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)
    tableView.setEditing(editing, animated: animated)
}

答案 6 :(得分:0)

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

Swift 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':)