iPhone - UITableView:更改默认编辑按钮名称

时间:2011-03-24 21:22:45

标签: iphone uitableview label edit

我的navigationBar中有一个常用的editButtonItem(由系统创建),我想更改它的名字。我在我的TableViewController中写了这行:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [Some code...]

    self.navigationItem.rightBarButtonItem = self.editButtonItem;
    self.navigationItem.rightBarButtonItem.title = @"New name";
}

这样可行,但在进入和退出编辑模式时,将恢复其系统名称。 我试图在didEndEditingRowAtIndexPath中再次强制它,但没有成功......

如何修复此自定义名称,而无需在代码中自行创建按钮?

6 个答案:

答案 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
}