NSMutableArray *objects
包含一些用于显示表格视图单元格内容的对象。如果objects.count
为0,我想在viewDidLoad
时启用表格视图的编辑模式:
- (void)viewDidLoad {
// If there is no content to present enable editing mode
if (self.objects.count == 0) [self setEditing:YES animated:YES];
}
这会切换self.editButtonItem
并在我的表格视图中插入一个新行(说明“点击此处添加新元素”):
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
[self.tableView setEditing:editing animated:animated];
if (self.editing) {
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[self.objects count] inSection:0]]
withRowAnimation:UITableViewRowAnimationAutomatic];
}
else {
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[self.objects count] inSection:0]]
withRowAnimation:UITableViewRowAnimationAutomatic];
}
}
不幸的是,此设置会导致崩溃:
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-1914.85/UITableView.m:833
是否无法以编程方式切换编辑模式?如果用户触摸了self.editButtonItem
,一切正常 - 据我所知,这个editButton与我在viewDidLoad
做的一样。
我做错了什么?
答案 0 :(得分:1)
我认为这里有两个不同的问题。
一,可以通过编程方式执行setEditing:animated:
。
但我认为这不是你真正想要尝试做的事情。编辑模式是供用户手动编辑表格,并在左侧显示小红色按钮,如果设置了这些设置,则可能在右侧显示小动作指示。
更好的做法是,当您发现对象已更改时,请执行[self.tableView reloadData];
,并确保实施的UITableViewDataSource
协议方法做得正确。这将包括tableView:numberOfRowsInSection:
(可能还有numberOfSections
)和tableView:cellForRowAtIndexPath:
的实施。这将导致项目在tableView中显示为objects
更改。