如何以编程方式添加两个UIBarButtonItem的UINavigationBar?

时间:2013-12-12 19:58:08

标签: uinavigationbar uibarbuttonitem

我在ViewController的viewDidLoad方法中添加了代码。我有两个UIBarButtonItem,其中一个在左边叫做Left,另一个在右边叫做Right。我可以让左键工作,但我甚至看不到正确的按钮。我做错了什么?

UINavigationBar *navbar = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, 420,           44)];
[navbar setBackgroundImage:[UIImage imageNamed:@"bg_fade.png"]     forBarMetrics:UIBarMetricsDefault];
UINavigationItem *item = [[UINavigationItem alloc]initWithTitle:@"Tray Tracker"];
UIBarButtonItem *leftButton = [[UIBarButtonItem alloc]initWithTitle:@"Left" style:UIBarButtonItemStylePlain target:self action:
                            @selector(leftAction:)];
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc]initWithTitle:@"Right" style:UIBarButtonItemStylePlain target:self action:
                               @selector(saveAction:)];
item.leftBarButtonItem = leftButton;
item.rightBarButtonItem = rightButton;
navbar.items = @[item];
[self.view addSubview:navbar];

我确实有针对leftAction和saveAction的IBActions

swcreenshot http://imageshack.com/a/img560/5706/skve.png

1 个答案:

答案 0 :(得分:1)

如果您只想要一个带有两个按钮的栏,则应使用UIToolbar。对于这个简单的案例,处理起来要容易得多。您需要的唯一更改是创建一个UIBarButtonItem flexibleSpace(它是一个系统项),并调用[toolbar setItems:@[leftButton, flexibleSpace, rightButton]];

如果您需要实际的导航功能,例如后退按钮,请查看此答案。您需要使用UINavigationBar pushNavigationItem。

using UINavigationBar without UINavigationController

在您的示例中,您滥用items属性。 UINavigationBar的文档说明,

The bottom item is at index 0, the back item is at index n-2, 
and the top item is at index n-1, where n is the number of items in the array.

为了完成你想要用UINavigationBar做的事情,我认为你需要多个navigationItems。

使用UIToolbar或将UINavigationBar与UINavigationController结合使用会更容易。

修改 现在您发布了图像,我认为您无法看到正确的条形按钮的原因是因为您的框架宽度太大。 iPhone屏幕宽度为320像素,因此navigationBar的框架应为CGRectMake(0,0,320,44)