将 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