2012-06-27 53 views
0

我正在使用下面的代码来尝试为我的应用程序制作一个“后退”按钮,该代码所在的视图位于模式视图中任何轴承?):“返回”按钮不显示在UINavigationController中

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位?

+0

http://stackoverflow.com/a/11160287/169277 – ant

+0

即使我使用leftBarButtonItem,它仍然不显示,我认为有我的代码self.navigationItem位有一些问题? – prince

+0

可能重复的[UIBarButton不会显示在我的UINavigationController](http://stackoverflow.com/questions/11159707/uibarbutton-wont-show-in-my-uinavigationcontroller) – FoamyGuy

回答

3

你需要确保当你提出你把它包装在一个UINavigationController的模式的看法,那么你就会有一个有效的导航栏来操作。否则,您将更改导航项目,但它不会显示,因为您不在导航控制器中。

所以,当你去呈现视图控制器时,你可能正在做这样的事情。

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

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

+0

好的,这很好。不过,我有这样的代码行:navBar = [[UINavigationController alloc] initWithRootViewController:tvController];在模式视图中,因为navBar不再被使用,我试图做到这一点:self.navigationController = [[UINavigationController alloc] initWithRootViewController:tvController];但self.navigationController是一个只读属性,任何方式围绕? – prince

+0

有什么想法?完全丢失在此刻 – prince

+1

你能告诉我更多关于tvController是什么吗?这是你试图使用的某种自定义导航栏吗? –

1

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

编辑:

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

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

好吧,我不能够使用leftBarButtonItem来代替? – prince

+0

您可以在当前可见的视图控制器上使用leftBarButtonItem,但不会获得标准的后退按钮形状。 –

+0

看到我在原始问题编辑 – prince

相关问题