我试过把这个放在代码的各个部分,比如commitEditingStyle方法的末尾,但是我无法让它停止编辑模式,基本上,我想在没有更多单元格的时候自动退出编辑模式......
if ([self.tableView numberOfRowsInSection:0] ==0)
{
NSLog(@"this triggers, but doesn't stop editing..");
self.tableView.editing = NO;
[self.tableView endEditing:YES];
}
5条答案
按热度按时间fruv7luv1#
[self setEditing:NO animated:YES]
怎么样?我假设self是UITableViewController的一个示例。ldfqzlk82#
来自苹果文档:
Note: The data source should not call setEditing:animated: from within its implementation of tableView:commitEditingStyle:forRowAtIndexPath:. If for some reason it must, it should invoke it after a delay by using the performSelector:withObject:afterDelay: method.
因此,在
commitEditingStyle
中调用它并不是一个很好的做法。yqyhoc1h3#
如果不只是
[self setEditing:NO animated:YES]
?1qczuiv04#
在玩过这个游戏之后,下面是需要知道的事情:有单独的setEditing例程用于控制器和tableView。确保使用控制器的setEditing例程。而且,如上所述,它需要一个延迟。为此,我使用了Matt的延迟函数。作为一个额外的好处,当列表中没有项目时,可以禁用Edit按钮。当添加项目时,该按钮再次启用。代码在Swift5中。
tzdcorbm5#
正如tooluser提到的,docu声明
setEditing:animated:
不应该从tableView:commitEditingStyle:forRowAtIndexPath:
内部调用,2023年仍然是这样。然而,一个使它工作的解决方案是受this post的启发使用
performBatchUpdates:completion:
。iOS 15中的工作示例: