2009-10-30 27 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;