2011-03-24 85 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 
}