将 BarButtonItem 添加到 NavigationBar

Posted

技术标签:

【中文标题】将 BarButtonItem 添加到 NavigationBar【英文标题】:Adding BarButtonItem To NavigationBar 【发布时间】:2011-09-22 06:26:51 【问题描述】:

我通过 IB 添加了一个 NavigationBar,并尝试以编程方式添加一个 BarButtonItem .....但它不起作用。

- (void)viewDidLoad  

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit"style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)];
    [self.navigationItem setLeftBarButtonItem:self.addButton];
    [super viewDidLoad];

【问题讨论】:

你看到没有任何按钮的导航栏了吗? 你把这个固定的Chandu搞定了吗? 是的@chown 我把它修好了。但以不同的方式 【参考方案1】:

尝试这样做:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonTapped:)];

【讨论】:

【参考方案2】:

在你的情况下试试这个:

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit"style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)];
[self.navigationItem setLeftBarButtonItem:addButton];

我想这可能有效。

【讨论】:

我认为它适用于以编程方式添加的导航栏...但我是从 IB 中添加的 如果您从 IB 添加了 BarButtonItem,那么您根本不需要编写此代码。只需为栏按钮项定义一个 Outlet,将其放在导航栏上并连接其方法,就像我们在 UIButtons 的情况下所做的那样。 ...是的,我做到了...但我想添加一个“编辑”按钮作为右栏按钮,点击后会变为“完成”。 在这种情况下,如果 BarButtonItem 的标题是“编辑”,则在 EditTable: 方法中添加一个检查标志,像这样[editButton setTitle:@"Done"]; 将其更改为“完成”,并在用户单击时保持切换那个按钮。如果您希望将其设为蓝色,请在标题为“完成”时将样式更改为由 [editButton setStyle:UIBarButtonItemStyleDone]; 完成。【参考方案3】:

您所做的是正确的,但到目前为止,您只是将 addButton 添加到 UINavigationItem 作为 leftBarButtonItem。要将其添加到导航栏,您需要将导航项推送到其上,类似于将新 UIViewController 添加到 UINavigationController 的方式。假设您将 UINavigationBar 命名为 navBar:

UINavigationItem *navigationItem = [[UINavigationItem alloc] init];

self.addButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit"style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)];
[navigationItem setLeftBarButtonItem:self.addButton];

[self.navBar pushNavigationItem:navigationItem animated:NO];
[navigationItem release];

希望有帮助!

【讨论】:

如果您使用的是 UINavigationController,则所有其他方法都可以使用,因为它将在内部处理其 UINavigationBar 的 navigationItem 推送/弹出。如果您在没有控制器的情况下使用 UINavigationBar,则必须自己执行此操作。【参考方案4】:
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] init]; 
self.navigationItem.leftBarButtonItem =  [[UIBarButtonItem alloc] initWithTitle:@"Edit"style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)];
self.navigationItem.leftBarButtonItem = addButton;
self.navigationItem.leftBarButtonItem.enabled = YES;

【讨论】:

不,先生,还没明白..我在 modalView 中添加了这个栏。(如果它与普通的有任何区别。)【参考方案5】:

对于某些视图,leftBarButtonItem 不起作用,您需要使用 backBarButtonItem。试试这个:

- (void)viewDidLoad  
    [self.navigationItem setBackBarButtonItem:[[[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)] autorelease];
    // Or, if that doesnt work for some reason use:
    // [self.navigationItem setLeftBarButtonItem:[[[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)] autorelease];
    [super viewDidLoad];

此外,您在viewDidLoad 范围内创建了一个名为addButton 的变量,但随后您尝试将属性self.addButton 设置为leftBarButtonItem

要么从self.addButton 中删除self.

[self.navigationItem setLeftBarButtonItem:self.addButton]; 

或者初始化属性而不是创建一个同名的新项目:

self.addButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit"style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)];
// instead of:
// UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit"style:UIBarButtonItemStyleBordered target:self action:@selector(EditTable:)];

【讨论】:

以上是关于将 BarButtonItem 添加到 NavigationBar的主要内容,如果未能解决你的问题,请参考以下文章

如何向在 tabcontroller 中以编程方式创建的导航控制器中的 barbuttonitem 添加操作

将右 barbuttonitem 添加到导航控制器 iphone sdk 后视图向上移动

如何在苹果电视的导航栏的 BarButtonItem 上移动焦点?

在导航栏中插入图标​​/使 BarButtonItem 不可点击 Swift iOS

使用 Swift (Xcode 6) 更改 BarButtonItem 字体

IOS - Swift - 向 BarButtonItem 的 customView 添加目标和操作