0

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

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 位有问题?

4

2 回答 2

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 实际上会做一些事情并且是可见的。

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

于 2012-06-27T15:52:08.273 回答
1

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

编辑:

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

UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Back"];
item.leftBarButtonItem = ...;
[navBar pushNavigationItem:item animated:NO];
于 2012-06-27T15:28:09.633 回答