2009-10-30 61 views
7

我正在使用UIBarButtonItem組成3個元素,UITextView,UIToolBar的iPhone視圖。我想讓UIBarButtonItem從'edit'(UIBarButtonSystemItemEdit)更改它的樣式爲'Done'(UIBarButtonSystemItemDone),並將新的選擇器更新爲新的方法。如何在運行時更改UINaviagationBar中的UIBarButtonItem類型?

首先,我曾嘗試下面的代碼,但它不工作:

你能幫我這個想法?

回答

14

沒有與此行爲的內置欄按鈕,您通過UIViewContoller的editButtonItem財產得到它。選中該按鈕將會將其來自的視圖控制器更改爲編輯模式,並將按鈕切換爲完成按鈕。

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.navigationItem.rightBarButtonItem = self.editButtonItem; 
} 
+0

非常感謝你!最好的答案與所有​​類似問題的真正解決方案! – itinance 2014-04-23 20:10:11

4

更改按鈕完成按鈕使用此

[self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone]; 

更改按鈕編輯按鈕使用此

[self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleBordered]; 
5

如果您已經通過IB添加的按鈕,然後確保將標識符設置爲自定義 同時在合適的IBOutlet和屬性中分配.h中的按鈕 合成.m中的按鈕

然後在你的代碼執行以下操作:

// Set to done 
editButton.style = UIBarButtonItemStyleDone; 
editButton.title = @"Done"; 

// Set back to edit 
editButton.style = UIBarButtonItemStyleBordered; 
editButton.title = @"Edit"; 
2

最後我做這樣的事情。不幸的是,直接設置標題不起作用,由於某種原因,它是零,不會讓我把它設置爲不同的值。 self.editButton來自一個IBOutlet,其目標和操作均已設置。此代碼使用ARC。我希望這可以幫助別人。

 NSString *title = app.settings.editing 
         ? NSLocalizedString(@"Done", @"") 
         : NSLocalizedString(@"Edit", @""); 

     UIBarButtonItemStyle style = app.settings.editing 
            ? UIBarButtonItemStyleDone 
            : UIBarButtonItemStyleBordered; 

     UIBarButtonItem *editButton 
      = [[UIBarButtonItem alloc] initWithTitle:title 
               style:style 
               target:self.editButton.target 
               action:self.editButton.action]; 

     self.navigationItem.rightBarButtonItem = editButton;