我在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感到困惑。任何帮助,将不胜感激。谢谢!
答案 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];