编辑自定义 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 中控制 UITextFields 的编辑
编辑单元格时自定义 UITableViewCell 反向缩进