当我按下编辑按钮时,我会在项目左侧看到圆形删除图标。当我按下单元格中的删除图标时它会“转”但删除按钮没有显示,所以我的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
}
}
就像我说一切正常,按下按钮和所有工作......只是没有删除按钮。
答案 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':)