繁体   English   中英

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

[英]How to change UIBarButtonItem's type in UINaviagationBar at runtime?

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

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

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

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

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

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

如果您已通过IB添加按钮,请确保将标识符设置为自定义。还要在.h中分配一个按钮,并使用适当的IBOutlet和属性合成.m中的按钮

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

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

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

要更改按钮,完成按钮使用此按钮

[self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone];

要将按钮更改为编辑按钮,请使用此选项

[self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleBordered];

我最终做了这样的事情。 不幸的是,直接设置标题不起作用,由于某种原因,它是零并且不允许我将其设置为不同的值。 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM