如何在UINavigationBar中更改编辑/完成按钮标题

时间:2012-11-17 10:37:05

标签: iphone objective-c xcode

如果为tableview启用了编辑模式,则会显示一个标题为“编辑”的按钮,按下该按钮会将标题更改为

我想知道是否有办法将完成按钮标题更改为其他内容?

我已经更改了完成按钮的标题。

我使用的代码是

self.navigationItem.rightBarButtonItem = self.editButtonItem;
self.editButtonItem.title = @"Change";

现在编辑是改变

如何完成其​​他事情?

3 个答案:

答案 0 :(得分:9)

您可以像这样更改编辑按钮的标题: -

- (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");
    }
}

它的工作就像编辑: -

enter image description here

enter image description here

答案 1 :(得分:8)

以下是为Swift更改它的方法

override func setEditing (editing:Bool, animated:Bool)
{
    super.setEditing(editing,animated:animated)
    if (self.editing) {
        self.editButtonItem().title = "Editing"
    }
    else {
        self.editButtonItem().title = "Not Editing"
    }
}

答案 2 :(得分:4)

Nitin's answer的基础上构建我建议使用内置UIButtonBar系统项的略有不同的方法。

这将为您的UI提供系统外观和优势;感觉。例如,标准"完成"停止编辑的按钮应该在iOS 8上具有特定的粗体外观。苹果可能会在将来更改这些样式。通过使用系统定义的按钮,您的应用程序将自动获取当前美学。

此方法还为您提供免费的字符串本地化。 Apple已经将系统按钮标题翻译成iOS支持的几十种语言。

这是我的代码:

-(IBAction) toggleEditing:(id)sender
{
  [self setEditing: !self.editing animated: YES];
}

-(void) setEditing:(BOOL)editing animated:(BOOL)animated
{
  [super setEditing: editing animated: animated];

  const UIBarButtonSystemItem systemItem = 
    editing ? 
    UIBarButtonSystemItemDone : 
    UIBarButtonSystemItemEdit;

  UIBarButtonItem *const newButton = 
    [[UIBarButtonItem alloc] 
      initWithBarButtonSystemItem: systemItem 
                           target: self 
                           action: @selector(toggleEditing:)];

  [self.navigationItem setRightBarButtonItems: @[newButton] animated: YES];
}

此处的示例适用于UIViewController托管在UINavigationController中并因此具有UINavigationItem实例的情况。如果您不这样做,则需要以适当的方式更新条形项。

viewDidLoad中使用以下调用来配置可供使用的编辑按钮:

[self setEditing: NO animated: NO];