我有一个UITableViewController
,用户应该能够编辑这些项目。为了启用编辑,我使用:
self.navigationItem.rightBarButtonItem = self.editButtonItem;
对于每个不知道self.editButtonItem来自哪里的人,它都是由SDK预定义的。
所以,现在当我按下任何一个项目时,这个方法被称为:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
但是当我点击编辑按钮并且编辑处于活动状态时,似乎没有调用此方法。
知道我错过了什么吗?
这是与编辑有关的其余代码:
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the specified item to be editable.
return YES;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleNone;
}
- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath
{
return NO;
}
感谢您的帮助。
MCB
答案 0 :(得分:122)
您必须将UITableView的allowsSelectionDuringEditing属性设置为true。
答案 1 :(得分:0)
点按编辑按钮时是否设置了self.editing = YES
?
在编辑模式下,当您点击一行时,将调用此方法,而不是didSelectRow:
tableView:commitEditingStyle:forRowAtIndexPath:.
答案 2 :(得分:0)
我以其他方式解决了这个问题。我的编辑按钮在我自己的导航栏上,这就是它没有被调用的原因。在导航控制器中嵌入VC后,在其导航项中放入新的编辑按钮后,编辑按钮开始被调用。
答案 3 :(得分:0)
简答(Swift lang):
@IBOutlet private weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.allowsSelectionDuringEditing = true // Magic happens here
}
答案 4 :(得分:-2)
但是当我点击编辑按钮并且编辑处于活动状态时,似乎没有调用此方法。
知道我错过了什么吗?
是。当点击导航栏中的按钮时,您希望调用tableView:didSelectRowAtIndexPath:
。这绝不会发生。仅在选择行时才会调用该方法。
点击编辑按钮时,您需要将表格置于编辑模式。在视图控制器中:
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
[super setEditing:editing animated:animated]; // must be called first according to Apple docs
[self.tableView setEditing:editing animated:animated];
}
然后,您通过添加tableView:commitEditingStyle:forRowAtIndexPath:
方法处理编辑事件。