退出编辑模式并更新导航栏项目

时间:2012-03-21 20:34:54

标签: iphone objective-c ios xcode uitableview

参考这个问题:Exit Edit Mode

关于在删除最后一行时退出编辑模式,我的问题是 - 如何更新导航栏"编辑"项目?删除最后一行后,我想完全删除此导航栏项目并退出编辑模式(根据下面的问题完成)并将此按钮状态恢复为"编辑" (而不是"完成"这是删除最后一行后的状态)。

这就是我现在正在做的事情:

- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {


...


    if ([section count] == 0) { //last row in the section
        [listOfItems removeObject:accessNumbers];    //updating my data source 
         tblSimpleTable.editing = NO; //added per the question above 
 //         self.navigationItem.rightBarButtonItem = nil; --> thats what ideally i would want to do
 //       [self setEditing:YES animated:YES]; --> adding this manually doen't help
    }
    else
    {
 ...
    }
}     


}

谢谢你的帮助!

更新:添加此行没有帮助。我仍然需要点击导航栏项目"完成"退出编辑模式。

[self.tblSimpleTable setEditing:YES animated:YES];

如果我也隐藏了导航栏项目,我基本上根本无法退出编辑模式,并且屏幕被冻结(我在视图上有一些其他按钮,在这种情况下根本不再对触摸作出反应)。

4 个答案:

答案 0 :(得分:4)

根据Apple文档,您无法在[self.tableview setEditing:NO animated:YES]内拨打tableView:commitEditingStyle:forRowAtIndexPath:。以下是相关摘录:

  

注意:数据源不应在其setEditing:animated:的实现中调用tableView:commitEditingStyle:forRowAtIndexPath:。如果出于某种原因必须使用performSelector:withObject:afterDelay:方法,则应在延迟后调用它。

大概可以创建一个选择器来关闭编辑模式并删除按钮。

答案 1 :(得分:3)

您可以在另一个回调中强制执行此规则吗?

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {

    BOOL answer = [section count] > 1;
    self.navigationItem.rightBarButtonItem = (answer)? self.editButtonItem : nil;
    return answer;
}

答案 2 :(得分:2)

我遇到了同样的问题(无法让barButtonItem的状态恢复为'在调用setEditing后编辑')并从此回答中学习https://stackoverflow.com/a/11490594/2888978改变方式的方法是编辑'回到'完成'在中殿栏上是在视图控制器上调用setEditing,而不是表。然后,您可以将barButtonItem设置为.None,以便在表为空时将其从导航栏中删除。

所以不要打电话:

self.tableView.setEditing(false, animated: true)

你会打电话:

self.setEditing(false, animated: true)

否则只有单元格的编辑模式会改变。

答案 3 :(得分:1)

要退出编辑模式,请使用:

[self.tableview setEditing:NO animated:YES];

要全部删除按钮,请使用:

// Note that this only removes the right-most button.  If you want to remove all of the buttons on the right side, use rightBarButtonItems instead.
self.navigationItem.rightBarButtonItem = nil;

// If you want it animated, use:
[self.navigationItem setRightBarButtonItem:nil animated:YES];