表视图:以编程方式setEditing

时间:2012-07-21 18:00:14

标签: objective-c

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做的一样。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

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

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

更好的做法是,当您发现对象已更改时,请执行[self.tableView reloadData];,并确保实施的UITableViewDataSource协议方法做得正确。这将包括tableView:numberOfRowsInSection:(可能还有numberOfSections)和tableView:cellForRowAtIndexPath:的实施。这将导致项目在tableView中显示为objects更改。