0

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.

我究竟做错了什么?

4

1 回答 1

1

我认为这里有两个不同的问题。

一,可以以setEditing:animated:编程方式执行。

但我认为这不是你真正想要在这里尝试做的。编辑模式是让用户手动编辑表格,并在左侧显示红色小按钮,如果您设置了这些设置,可能还会在右侧显示小移动指示器。

更好的做法是当你发现你的对象发生了变化时,执行 a [self.tableView reloadData];,并确保你UITableViewDataSource实现的协议方法做正确的事情。这将包括tableView:numberOfRowsInSection:(可能还有numberOfSections)和tableView:cellForRowAtIndexPath:. 这将导致项目作为更改出现在 tableView 中objects

于 2012-07-21T18:09:16.683 回答