如何在运行时更改UINaviagationBar中的UIBarButtonItem类型?

时间:2009-10-30 06:01:11

标签: iphone uinavigationbar uibarbuttonitem

我正在开发一个iPhone的视图,它包含3个元素,UITextView,UIToolBar和UIBarButtonItem。

目标是,我希望UIBarButtonItem将其样式从'edit'(UIBarButtonSystemItemEdit)更改为'Done'(UIBarButtonSystemItemDone)并将新选择器更新为新方法。

首先,我尝试了以下代码,但它不起作用:

你能帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:14)

有一个带有此行为的内置栏按钮,您可以通过UIViewContoller的editButtonItem属性获取它。选中该按钮将更改其进入编辑模式的视图控制器,并将按钮切换为完成按钮。

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

答案 1 :(得分:5)

如果您已通过IB添加按钮,请确保将标识符设置为自定义 同时在.h中分配一个带有适当IBOutlet和Property的按钮 合成.m

中的按钮

然后在您的代码中执行以下操作:

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

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

答案 2 :(得分:4)

更改按钮“完成”按钮使用此

[self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone];

将按钮更改为“编辑”按钮使用此

[self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleBordered];

答案 3 :(得分: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;