1

In my viewDidLoad method I have the following:

navigBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonSystemItemAction target:self action:@selector(btnClicked:)];
[self.view addSubview:navigBar];

The button does not show up at all! What am I missing?

4

3 回答 3

4
// create the navigation bar and add it to the view
UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
[self.view addSubview:navigationBar];

// create a button
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonSystemItemAction target:self action:@selector(btnClicked:)];

// create a UINavigationItem and add the button in the right hand side
UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:nil];
navItem.rightBarButtonItem = button;

// add the UINavigationItem to the navigation bar
[navigationBar pushNavigationItem:navItem animated:NO];
于 2012-08-09T20:24:37.910 回答
3

首先阅读:

当您将导航栏用作独立对象时,您有责任提供其内容。与其他类型的视图不同,您不直接将子视图添加到导航栏。相反,您使用导航项(UINavigationItem 类的实例)来指定要显示的按钮或自定义视图。导航项具有用于指定导航栏左侧、右侧和中心的视图以及用于指定自定义提示字符串的属性。

导航栏管理 UINavigationItem 对象的堆栈。尽管堆栈主要用于支持导航控制器,但您也可以使用它来实现自己的自定义导航界面。堆栈中最顶部的项表示其内容当前由导航栏显示的导航项。您可以使用 pushNavigationItem:animated: 方法将新导航项推送到堆栈上,并使用 popNavigationItemAnimated: 方法将项从堆栈中弹出。为了用户的利益,可以对这两种变化进行动画处理。

所以基本上你需要做的是:

[navigBar pushNavigationItem:self.navigationItem animated:NO];
于 2012-08-09T19:48:35.320 回答
3

在导航栏上设置按钮。然后你创建一个BarButtonItem导航。

barbutton=[UIBarButtonItem alloc] ]initWithTitle......
navigation.navigationController.rightBarButton= barbutton;
于 2012-08-09T18:20:53.127 回答