2011-11-24 44 views
3

对于我的一个视图控制器(扩展UITableViewController),我需要将其后退按钮文本配置为“返回”。但后退按钮仍然显示与父视图控制器的标题(默认)。返回按钮文字不变

- (void)viewDidLoad 
{ 
    ... 
    self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease]; 
} 

回答

3

您需要在视图控制器上设置将类推入堆栈的返回按钮,例如创建并推送您正在显示的课程的控制器

View Controller Programming Guide for iOS的文档建议将UINavigationItem保存在Navigation Item Stack中,该文档为堆栈上的当前项提供标题和按钮。

重要(I加入[]比特)

虽然大多数导航栏的内容被从最上层的导航项目获得的[在导航堆栈],一个指向后面项[的在堆栈中的前一个项目]被维护,以便可以创建后退按钮(带有前一项目的标题)。

综观下Configuring the Navigation Item Object部分的文档有一个示意图,它表示栈和backItem指向在堆栈顶部项目下方的项。在你的情况下,堆栈中的顶级项目将指向你正在显示的类的UINavigationItem,而backItem将是一个指向推送它的类的指针。

NB
看的文档该部分的图像胜过千言万语

3

试试这个:

UIButton* backButton = [UIButton buttonWithType:101]; 
[backButton addTarget:self action:@selector(popView:) forControlEvents:UIControlEventTouchUpInside]; 
[backButton setTitle:@"Back" forState:UIControlStateNormal]; 

UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 
self.navigationItem.leftBarButtonItem = backItem; 
self.navigationItem.backBarButtonItem.enabled = NO; 
self.navigationItem.leftBarButtonItem.enabled = YES; 
[backButton release]; 

你需要实现一个简单的方法popView,像这样:

-(IBAction)popView:(id)sender 
{ 
    [self.navigationController popViewControllerAnimated:NO]; 
} 
0

以下是来自最新的UINavigationController cla的更多信息ss参考,它告诉你如何改变“推”或“推”控制器中的按钮(我会添加链接,但Apple会以微妙的方式不断移动东西。请使用您最喜爱的搜索引擎)。

总结:如果您正在配置后推按钮(即上一个)控制器,则访问backBarButtonItem。无论下一个控制器的类型如何,这都非常适合配置一致命名的后退按钮。如果你想/需要在推送(即当前)控制器中改变它,你需要访问leftBarButtonItem。

相关的文字是在这里:在导航栏左侧

酒吧按钮项目允许 导航回导航 堆栈上的一个视图控制器。导航控制器更新 导航栏的左侧,如下所示:

如果新的顶级视图控制器具有自定义左栏按钮项目,则会显示该项目。要指定自定义左栏按钮 项目,请设置视图控制器的 导航项目的leftBarButtonItem属性。

如果顶层视图控制器不具有自定义左侧栏按钮项目,但以前的视图控制器 的导航项目在其backBarButtonItem财产有效的项目,在导航栏 显示该项目。

如果未通过任一视图控制器的指定的自定义栏按钮项,缺省的回按钮用于和它的标题被设置为前一视图的标题属性的 值控制器,也就是说, 的视图控制器在堆叠上向下一级。 (如果导航堆栈上只有一个 视图控制器,则不显示后退按钮。)