我有一个带有按钮的UIToolbar,我想用它来切换编辑模式,以便在我的UITableView中删除行。如果我决定动态更改UIBarButton的 title ,我已经完成了一切。即,您启动应用程序,按钮显示“删除”。单击它,UITableView切换到“编辑”模式,然后将按钮的标题更改为“完成”。再次单击它并退出“编辑”模式,按钮返回“删除”标题。
我未能开始工作的是让按钮显示标准垃圾桶图标而不是“删除”。我注意到了UIBarButtonSystemItemTrash常量,如果我开始使用它,它肯定会显示垃圾图标,但如果我这样做,我就无法切换到“完成”按钮。
以下是适用于标题更改方法的代码:
- (IBAction)toggleDelete
{
[self.eventsTable setEditing:!self.eventsTable.editing animated:YES];
if (self.eventsTable.editing)
{
[self.deleteButton setTitle:@"Done"];
[self.deleteButton setStyle:UIBarButtonItemStyleDone];
}
else
{
[self.deleteButton setTitle:@"Delete"];
[self.deleteButton setStyle:UIBarButtonItemStyleBordered];
}
}
我尝试了其他几种方法,但没有一种方法有效。这是系统似乎忽略的一个:
- (IBAction)toggleDelete
{
[self.eventsTable setEditing:!self.eventsTable.editing animated:YES];
if (self.eventsTable.editing)
[self.deleteButton setStyle:UIBarButtonSystemItemDone];
else
[self.deleteButton setStyle:UIBarButtonSystemItemTrash];
}
而且这里的另一个黑客当然看起来很黑,但我发现有人声称它会起作用。不幸的是,它不适合我,但无论如何它感觉更加hacky。它似乎也被系统忽略了;我的意思是,无论我设置按钮如何在Interface Builder中启动,即使此代码正在执行,它也是如此。
- (IBAction)toggleDelete
{
[self.eventsTable setEditing:!self.eventsTable.editing animated:YES];
if (self.eventsTable.editing)
{
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:self action:@selector(toggleDelete)];
self.deleteButton = doneButton;
[doneButton release];
}
else
{
UIBarButtonItem *trashButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemTrash
target:self action:@selector(toggleDelete)];
self.deleteButton = trashButton;
[trashButton release];
}
}
我看到了一些与我的情景相近的其他问题,但没有一个问题最终得到帮助。
答案 0 :(得分:0)
你可能已经这样做但是因为我在代码中看不到它,所以无论如何我都会提到它。将deleteButton设置为doneButton或trashButton后,您应该将deleteButton设置为正确的barItem。在else语句之后,可能是这样的:
self.navigationItem.rightBarButtonItem = self.deleteButton;