以编程方式将UIBarButtonItem添加到UINavigationBar

时间:2011-07-17 00:29:30

标签: ios iphone uinavigationbar uibarbuttonitem

我在UINavigationBar中放入UIInterfaceBuilder。我以模态方式呈现此视图,只想让UIBackBarButton返回到我的上一个视图。我声明了这个UINavigationBar的出口和属性。我想在我的viewDidLoad方法中,我可以像这样创建一个UIBackButton

UIBarButtonItem *backButton = 
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonItemStyleBordered 
                                              target:self 
                                              action:@selector(goBack)];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];

但我在UIBackBarButtonItem上看不到我的UINavigationBar。我认为我在这里做错了,因为我不认为我的UINavigationBar知道我试图以这种方式将UIBackBarButtonItem添加到其中。我是否必须创建一个NSArray,将按钮放入其中,然后将setItems用于NavigationBar?

我对navigationItem属性如何工作以及UINavigationBar的setItems感到困惑。任何帮助,将不胜感激。谢谢!

4 个答案:

答案 0 :(得分:16)

您正尝试在模式视图中设置后退按钮项,该视图不会添加backBarButtonItem。这导致按钮(或任何类型的后退按钮)不显示。 backBarButtonItem主要用于推送视图控制器,当您按下新视图控制器(顶部项目)时,它会从父节点(下面的下一项)添加后退按钮。 Apple UINavigationItem Documentation说:

  

当此项目是导航栏的后退项目时 - 当它是顶部项目下方的下一个项目时 - 它可以表示为导航栏上的后退按钮。使用此属性指定后退按钮。您设置的后栏按钮项目的目标和操作应为零。默认值是显示导航项标题的条形按钮项。

要按照您的意愿获得左侧的后退按钮,请尝试更改

self.navigationItem.backBarButtonItem = backButton;

self.navigationItem.leftBarButtonItem = backButton;

答案 1 :(得分:12)

从视图控制器进行这样的调用

{
    NextViewController* vcRootView = [[NextViewController alloc] initWithNibName:@"NextView" bundle:[NSBundle mainBundle]];
    UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:vcRootView];
    [vcRootView release];

    [self.navigationController presentModalViewController:navController animated:YES];
    [navController release];    

}

将在调用视图上显示NextViewController作为Modal视图,NextViewController将为它提供一个navigationController。

在NextViewController实现文件中,您只需要这个

- (void)viewDidLoad {
    [super viewDidLoad];

    UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self 
                                                                  action:@selector(barButtonBackPressed:)];
    self.navigationItem.leftBarButtonItem = backButton;
    [backButton release];
}


-(void)barButtonBackPressed:(id)sender{
    [self dismissModalViewControllerAnimated:YES];
}

使用后退按钮来关闭模态视图。希望它有所帮助。

答案 2 :(得分:8)

使用以下代码段:

//Add button to NavigationController
UIBarButtonItem *backButton = 
 [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@“back”, @"")
                                  style:UIBarButtonItemStylePlain 
                                 target:self 
                                 action:@selector(goBack)];

self.navigationItem.leftBarButtonItem = backButton;

//Perform action on back Button
- (void) goBack {    // Go back task over-here
}

可用的不同风格类型是:

UIBarButtonItemStylePlain, UIBarButtonItemStyleBordered, UIBarButtonItemStyleDone

答案 3 :(得分:3)

您可以在不创建新UIBarButtonItem的情况下使用此setter:

[self.navigationItem.leftBarButtonItem setAction:@selector(doBackButton:)];
[self.navigationItem.leftBarButtonItem setTarget:self];