2011-03-24 84 views
3

我在我的navigationBar(由系统创建)中有一个通常的editButtonItem,我想改变它的名字。硅我写这行我TableViewController:iPhone - UITableView:更改默认编辑按钮名称

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [Some code...] 

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

这样的作品,但进入和退出编辑模式时,它的系统名称恢复。 我试图在didEndEditingRowAtIndexPath例如再次发力,但没有成功...

我应该怎么做来解决这个自定义名称,而不必通过自己在代码建立从开始按钮?

回答

17

@ 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"); 
    } 
} 
+3

好主意!另外:在'viewDidLoad'上调用self.editing = NO! – VietHung 2013-11-29 03:53:33

5

如果您不喜欢现有名称,请创建您自己的编辑按钮项目。

声明伊娃editItem在你的头,然后创建一个像这样的项目:

editItem = [[UIBarButtonItem alloc] initWithTitle:@"New Name" style:UIBarButtonItemStyleBordered target:self action:@selector(toggleEditing)] 
在-toggleEditing

,叫

[self setEditing:!self.editing animated:YES] 

并更新按钮的标题(和可选的外观)来反映编辑状态。

2
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (self.tableView.editing) { 
    self.editButtonItem.title = @"CustomDoneName"; 
    } 
    else 
    self.editButtonItem.title = @"CustomEditName"; 
    return YES; 
} 

这对我很好。

0

为了补充这些答案。定制是去牢记方式:

如果你创建自己的按钮,这将改变标题,请确保您设置它的possibleTitles财产。

self.myEditButton.possibleTitles = [NSSet setWithObjects:@"Edit Seats", @"Done", nil]; 

否则,您的按钮过渡动画可能会奇怪,尤其是当标题的长度不同显著。原因是,我们改变了按钮的标题,因为它的动画正在被点击。

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

对于斯威夫特3,你应该覆盖setEditing(_编辑: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 
}