后退按钮文本不会改变

时间:2011-11-24 00:22:46

标签: objective-c

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

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

3 个答案:

答案 0 :(得分:3)

您需要在视图控制器上设置后退按钮,将该类推到堆栈上,例如创建并推送正在显示的类的控制器

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

重要(我在[])中添加了位

  

虽然大多数导航栏的内容是从[导航堆栈]中最顶层的导航项获得的,但是仍然保留了指向[前一项中的项目]的后退项目的指针,以便后退按钮(带有标题)可以创建上一项)。

查看Configuring the Navigation Item Object部分下的文档,有一个图表显示堆栈和backItem指向堆栈顶部项目下方的项目。在您的情况下,堆栈中的顶部项目将引用您正在显示的类的UINavigationItembackItem将是指向推送它的类的指针。

<强> NB
在文档中查看该部分,图像值得千言万语

答案 1 :(得分: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];
}

答案 2 :(得分:0)

这是来自最新UINavigationController类引用的更多信息,它告诉您如何更改“推”或“推”控制器中的按钮(我添加了链接,但Apple继续微妙地移动内容方法。请使用您最喜欢的搜索引擎)。

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

相关文字如下:

  

导航栏左侧的条形按钮项允许   导航回导航上的前一个视图控制器   堆。导航控制器更新了左侧   导航栏如下:

     

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

     

如果顶级视图控制器没有自定义左栏按钮项,而是前一个视图控制器的导航项   在其backBarButtonItem属性(导航栏)中有一个有效项   显示该项目。

     

如果任一视图控制器未指定自定义栏按钮项,则使用默认后退按钮,并将其标题设置为   上一个视图控制器的title属性的值 - 即   视图控制器在堆栈上向下一级。 (如果只有一个   在导航堆栈上查看控制器,不显示后退按钮。)