“后退”按钮不会显示在UINavigationController中

时间:2012-06-27 15:23:05

标签: iphone objective-c ios uinavigationbar

我正在使用以下代码尝试为我的应用程序创建一个“后退”按钮,此代码所在的视图位于模态视图中(如果有任何影响?):

navBar = [[UINavigationController alloc] initWithRootViewController:tvController];

[navBar.view setFrame:CGRectMake(0, 0, 320, 460)];
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle: @"Back"
                                                                           style: self.navigationController.navigationItem.leftBarButtonItem.style
                                                                          target: self
                                                                          action: @selector(backAction)];
navBar.navigationItem.backBarButtonItem.enabled = YES;

[self.view addSubview:navBar.view];

视图根本没有显示,感谢您的任何提示!

编辑:即使我使用了leftBarButtonItem,它仍然没有显示,我认为我的代码的self.navigationItem位有问题吗?

2 个答案:

答案 0 :(得分:3)

您需要确保在呈现将其包装在UINavigationController中的模态视图时,您将拥有一个有效的导航栏来进行操作。否则你将改变所需的navigationItem,但它不会显示,因为你不在navigationController中。

因此,当你去展示视图控制器时,你可能正在做这样的事情。

SomeViewController *someViewController = [[[SomeViewController alloc] init] autorelease];
[self presentModalViewController:someViewController animated:YES];

你想要做的就是像这样出现

SomeViewController *someViewController = [[[SomeViewController alloc] init] autorelease];
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:someViewController] autorelease]
[self presentModalViewController:navigationController animated:YES];

然后,当您处于模态视图中时,您将拥有一个可以操作的有效导航栏。在那一点改变leftBarButtonItem实际上会做一些事情并且可见。

如果你试图让这个节目成为一个后退按钮,虽然你可能“做错了”,通常如果你像这样模仿这样的东西你会显示一个“完成”按钮。然而,通过使用这样的导航控制器包装它,它确实允许模态视图然后推送和弹出视图控制器并作为普通导航堆栈操作。但它的根本应该有一个“完成”按钮而不是后退以返回其先前的状态。

答案 1 :(得分:1)

backBarButtonItem属性需要在堆栈中的上一个项目上定义,即在您要返回的视图控制器上,而不是当前属性。

修改

好的,我现在看到您正在添加自己的自定义导航栏。在这种情况下,您无法使用视图控制器的导航项。您必须将自己的导航项目推送到导航栏并改为访问它们。例如:

UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Back"];
item.leftBarButtonItem = ...;
[navBar pushNavigationItem:item animated:NO];