我的navigationBar中有一个常用的editButtonItem(由系统创建),我想更改它的名字。我在我的TableViewController中写了这行:
- (void)viewDidLoad
{
[super viewDidLoad];
[Some code...]
self.navigationItem.rightBarButtonItem = self.editButtonItem;
self.navigationItem.rightBarButtonItem.title = @"New name";
}
这样可行,但在进入和退出编辑模式时,将恢复其系统名称。
我试图在didEndEditingRowAtIndexPath
中再次强制它,但没有成功......
如何修复此自定义名称,而无需在代码中自行创建按钮?
答案 0 :(得分:18)
@ Bojan的方法很接近,但效率非常低,因为每一行都会调用它。只需在viewDidLoad
开头更改标题,另外执行此操作:
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
// Make sure you call super first
[super setEditing:editing animated:animated];
if (editing)
{
self.editButtonItem.title = NSLocalizedString(@"Cancel", @"Cancel");
}
else
{
self.editButtonItem.title = NSLocalizedString(@"Edit", @"Edit");
}
}
答案 1 :(得分:5)
如果您不喜欢现有的编辑按钮项,请创建自己的编辑按钮项。
在标题中声明一个ivar editItem,然后像这样创建项目:
editItem = [[UIBarButtonItem alloc] initWithTitle:@"New Name" style:UIBarButtonItemStyleBordered target:self action:@selector(toggleEditing)]
in -toggleEditing,调用
[self setEditing:!self.editing animated:YES]
并更新按钮的标题(以及可选的外观)以反映编辑状态。
答案 2 :(得分:2)
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
if (self.tableView.editing) {
self.editButtonItem.title = @"CustomDoneName";
}
else
self.editButtonItem.title = @"CustomEditName";
return YES;
}
这对我来说很好。
答案 3 :(得分:0)
补充这些答案。自定义是走向但的方式:
如果您确实创建了自己的按钮,这将更改标题,请确保将其设置为 possibleTitles 属性。
MediaCapture
否则,按钮上的过渡动画可能会变得奇怪,特别是如果标题的长度明显不同。这样做的原因是,我们更改了按钮的标题,因为它正在点击动画。
答案 4 :(得分:0)
这是我在使用自定义标题切换按钮时找到修复editButtonItem的临时收缩脏过渡状态的唯一方法。
即使设置possibleTitles也无法提供完美的结果。
- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
NSString *editButtonTitleBefore = self.editButtonItem.title;
[super setEditing:editing animated:animated];
[self.tableView setEditing:editing animated:animated];
[self setToolbarLayout];
if (editing && ![self.editButtonItem.title isEqualToString:NSLocalizedString(@"Cancel", @"Cancel")])
{
self.editButtonItem.title = NSLocalizedString(@"Cancel", @"Cancel");
}
else if (!editing && ![editButtonTitleBefore isEqualToString:@"Edit"])
{
// Dirty hax to avoid the editButton system title label shrink bug
self.editButtonItem.title = @"";
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.editButtonItem.title = NSLocalizedString(@"Edit", @"Edit");
});
}
}
答案 5 :(得分:0)
对于Swift 3,您应该覆盖setEditing(_ editing:Bool,animated:Bool)UIViewController的方法如下:
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
if self.isEditing {
self.editButtonItem.title = "[New editing title]"
}
else {
self.editButtonItem.title = "[New to edit title]"
}
}
此外,您应该在viewDidLoad上调用此方法,以具有正确标题的视图开始editButtonItem,如下所示:
override func viewDidLoad() {
super.viewDidLoad()
self.setEditing(false, animated: false)
self.navigationItem.leftBarButtonItem = self.editButtonItem
}