编辑自定义 UITableViewCell 时不出现插入/删除编辑控件

Posted

技术标签:

【中文标题】编辑自定义 UITableViewCell 时不出现插入/删除编辑控件【英文标题】:Insert / Delete editing controls not appearing while editing custom UITableViewCell 【发布时间】:2016-09-16 15:57:17 【问题描述】:

我已经对此进行了研究,但似乎还没有找到解决方案。我有一个自定义 UITableViewCell (具有各种子视图,包括单选按钮、标签等)。当表格视图设置为编辑时,我希望 + 和 - 插入/删除编辑控件出现在单元格的最左侧。

如果我使用标准的 UITableViewCell,这将非常有效。但是,在使用自定义单元格时,控件不会出现。请问有人对如何解决这个问题有任何想法吗?

下面是我的表格视图代码的一些快照......

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

    if (self.isEditing) 
        if ([tableView isEqual:self.tableView]) 
            if (editingStyle == UITableViewCellEditingStyleInsert) 
                // ...
                              
            else if (editingStyle == UITableViewCellEditingStyleDelete) 
                // ...
            
          
    


- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

    if ([tableView isEqual:self.tableView]) 
        if (indexPath.row == 0) 
            return UITableViewCellEditingStyleInsert;
        
        else 
            return UITableViewCellEditingStyleDelete;
        
    
    else 
        return UITableViewCellEditingStyleNone;
    

以及自定义表格视图单元格代码...

- (void)awakeFromNib

    [super awakeFromNib];


- (void)setEditing:(BOOL)editing animated:(BOOL)animated

    [self setNeedsLayout];


- (void)layoutSubviews

    [super layoutSubviews];

    [self configureConstraints];


- (void)configureConstraints

    // This is where the cell subviews are laid out.

【问题讨论】:

【参考方案1】:

您没有在自定义单元格中正确实现setEditing:animated: 方法。你忘了打super

- (void)setEditing:(BOOL)editing animated:(BOOL)animated

    [super setEditing:editing animated:animated];

    [self setNeedsLayout];

这是一种罕见的不调用 super 的重写方法。

不相关 - 在您的表格视图代码中,不要使用 isEqual: 来比较两个表格视图,请使用 ==

if (tableView == self.tableView) 

你确实想看看它们是否是相同的指针。

【讨论】:

谢谢@rmaddy ...这完美!我在这个实施中的疏忽就超级错过了!再次感谢 - 我会在最短时间后很快接受答案!也感谢关于相等比较器的提示!【参考方案2】:

来源:Custom edit view in UITableViewCell while swipe left. Objective-C or Swift

-(NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath 

    UITableViewRowAction *editAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"Clona" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
        //insert your editAction here
    ];
    editAction.backgroundColor = [UIColor blueColor];

    UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"Delete"  handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
        //insert your deleteAction here
    ];
    deleteAction.backgroundColor = [UIColor redColor];
    return @[deleteAction,editAction];

【讨论】:

谢谢@user6837640 ...这确实会显示编辑操作,但只能在左滑动时显示?我确实希望在表格设置为编辑时始终显示 + 和 - 按钮。基本上就像 ios 上的编辑联系人视图......或者我错过了什么......?

以上是关于编辑自定义 UITableViewCell 时不出现插入/删除编辑控件的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UITableViewCell 编辑动画

UITableViewCell 自定义编辑视图

如何在自定义 UITableViewCell 中控制 UITextFields 的编辑

编辑单元格时自定义 UITableViewCell 反向缩进

实现 willTransitionToState: 时自定义 UITableViewCell 不显示编辑控件

在 UITableViewCell 中添加自定义编辑和删除按钮