如何以编程方式添加NavigationBarItem和UIBarButtonItem?

时间:2011-12-16 07:43:29

标签: ios uinavigationbar uibarbuttonitem

我使用对presentModalViewController的调用提交了一个视图。

我的新视图没有导航栏,因此我在库中添加了一个,但现在我在控制器的UIBarButtonItem中创建了viewDidLoad,并将其设置为{{1} } rightBarButtonItem

但是当我运行我的应用程序时,导航栏就在那里,但没有按钮。

我错过了一步还是什么?

3 个答案:

答案 0 :(得分:0)

手动添加导航栏不会使self.navigationController属性生效,而且其值为nil,我相信您用它来添加UIBarButtonItem实例。< / p>

我建议在控制器中声明UINavigationBar IBOutlet,在NIB编辑器中将其与您添加的导航栏连接,然后在viewDidLoad中使用类似的内容:

@interface ...
@property (nonatomic, retain) IBOutlet UINavigationBar *theBar;
@end

@implementation ...
@synthesize theBar;

-(void)viewDidLoad {
  [super viewDidLoad];

  UIBarButtonItem *yourButton = ...;

  UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"MyTitle"];
  item.rightBarButtonItem = yourButton;

  [theBar pushNavigationItem: item animated:NO];
  [item release];

  ...
}

@end

答案 1 :(得分:0)

我想 UIViewController的navigationBarItem属性仅在您的ViewController与UINavigationController一起使用时才有效

如果添加带有界面构建器的导航栏 或者添加代码,然后你需要使用 - (void)pushNavigationItem:(UINavigationItem *)项目动画:(BOOL)动画

自己添加UINavigationItem

你可以创建一个UINavigationController use - (id)initWithRootViewController:(UIViewController *)yourViewController

并使用presentModalViewController显示您创建的UINavigationController

然后你可以使用UIViewController的navigationBarItem属性在viewDidLoad中设置rightBarButtonItem

答案 2 :(得分:0)

实际上它比这更容易:

  1. 将UINavigationBar拖到您的应用中。请注意,当您执行此操作时,您还将获得UINavigationItem ...请确保保留它。

  2. 将以下属性添加到您的应用中:

    @property (weak, nonatomic) IBOutlet UINavigationItem *navigationItem;

  3. Xcode可能会指示错误(您正在覆盖UIViewController的内置属性),因此您必须手动合成getter和setter。在类的@implementation语句下添加以下行:

    @synthesize navigationItem;

  4. 在Interface Builder中,将连接从新的navigationItem属性拖到自定义导航项。

  5. 您现在可以使用self.navigationItem访问导航项,就像您通常一样。