UIViewController编辑按钮状态始终相同

时间:2012-10-01 16:03:35

标签: iphone objective-c ios uitableview uiviewcontroller

我在我的应用中向导航栏添加了一个“编辑”按钮。

我有一个实现UITableViewDataSource和UITableViewDelegate的UIViewController。

我使用故事板添加了UITableView,并建立了与数据源和委托的连接。

我在视图控制器的实现文件中这样做了:

self.navigationItem.rightBarButtonItem = self.editButtonItem;
[self.editButtonItem setAction:@selector(setEditing:animated:)];

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    DLog(@"Editing = %d", editing)
    NSLog(editing ? @"Yes" : @"No");

    [self.recentSearchList setEditing:editing animated:YES];
}

问题是每当我点击编辑按钮时,BOOL变量“编辑”总是“是”。首先,它将UITableView设置为编辑模式,但“编辑”按钮仍然显示“编辑”标签而不是“完成”。由于参数始终为YES,因此表视图永远不会设置为正常模式。

我从这里的答案中读到:UITableView in edit mode - 'Edit' button doesn't change status

我假设编辑按钮应该在点击时改变其状态。并且重写方法中的参数也应该切换。

我可以编写自己的代码来在UIViewController中设置标志来检查模式并相应地切换tableView,但我假设必须有其他方法。

2 个答案:

答案 0 :(得分:6)

来自文档

enter image description here

同时删除第[self.editButtonItem setAction:@selector(setEditing:animated:)];

editButtonItem与方法- (void)setEditing:(BOOL)editing animated:(BOOL)animated隐式关联。

所以你只需要覆盖那个方法,并在文档中说顶层调用super的实现。

答案 1 :(得分:0)

我认为如果你仔细观察,你会发现编辑实际上是对控件本身的引用。

当您在UIControl上调用setAction时(在这种情况下是您的右键),您的目标可以具有以下签名之一。

- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)

您必须单独处理此方法中的编辑模式。

相关问题