如何将set title设置为leftBarButtonItem

时间:2012-02-26 09:46:02

标签: objective-c ios push backbarbuttonitem

我有 root ViewController和详细 ViewController。当我推送到detailedViewController时,我得到leftBarButtonItem,其中包含来自root的标题。但我希望标题只是"返回",仅此而已。那怎么办?

这没有帮助

self.navigationItem.leftBarButtonItem.title = @"Back";

要创建我的on类型barButtonItem(例如104左箭头)并将其设置为leftBarButtonItem是一个糟糕的决定。

除了在推送之前手动更改rootViewController的标题之外还有其他方法吗?

4 个答案:

答案 0 :(得分:7)

来自Apple的文档:

  

backBarButtonItem

     

当需要后退按钮时使用的小节按钮项目   导航栏。

     

@property(nonatomic,retain)UIBarButtonItem * backBarButtonItem   讨论

     

当此导航项位于该顶部项目的正下方时   堆栈,导航控制器派生后退按钮   此导航项的导航栏。当这个属性为零时,   导航项使用其title属性中的值来创建   适当的后退按钮。 如果要指定自定义图像或   后退按钮的标题,您可以指定自定义栏按钮项   (使用您的自定义标题或图片)改为此属性。什么时候   配置栏按钮项,不要为其指定自定义视图;   导航项忽略后栏按钮中的自定义视图   反正。

因此,您可以创建创建barButtonItem(例如– initWithTitle:style:target:action:)并将其分配给该属性。

此外,如果您想要UIBarButtonItem(左侧或右侧)的自定义图像,我建议您创建类似以下内容的类别扩展名:

//UIBarButtonItem+Extension.h    
+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image title:(NSString*)title target:(id)target action:(SEL)action;

//UIBarButtonItem+Extension.m    
+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image title:(NSString*)title target:(id)target action:(SEL)action
{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
    button.titleLabel.textAlignment = UITextAlignmentCenter;

    [button setBackgroundImage:image forState:UIControlStateNormal];
    [button setTitle:title forState:UIControlStateNormal];
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem* barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];

    return [barButtonItem autorelease];    
}

然后将其用作

UIBarButtonItem* backBarButtonItem = [UIBarButtonItem barItemWithImage:[UIImage imageNamed:@"YoutImageName"] title:@"YourTitle" target:self action:@selector(doSomething:)];

答案 1 :(得分:6)

我终于找到了今天所有的皱纹,而且比上面更简单。

子项的后退按钮文本基于其父项中设置的值。当您考虑它时,这是显而易见的行为:如果可以从两个父母访问视图控制器,则后退按钮的文本应该取决于推动它的位置。

如果文字始终相同:

  1. 在编辑器中选择父视图控制器的导航项
  2. 将文字放入后退按钮值。
  3. 就像那样你已经完成了。当此视图控制器被新视图控制器推到一边时,该新视图控制器将此文本作为其标题。

    如果文字是动态的:

    1. 在编辑器中选择父视图控制器的导航项
    2. 部分文字放入后退按钮值。
    3. 视图控制器中更改标题时设置标题:self.navigationItem.backBarButtonItem.title = dynamicText;
    4. 而且,你又完成了。

      要清楚,您可以随时在父视图控制器中进行设置。只有在按下另一个视图控制器时才会显示它。

      如果您没有将文本放在设计器中的后退按钮中,则实例化视图控制器的过程将不会创建self.navigationItem.backBarButtonItem,并且您无法设置nil对象的标题。我相信这就是围绕这一切的所有混乱所在。

      当然,您可以在运行时创建它,但如果您已经在storyboard / nib中完成了大部分工作,那么让解码器更容易为您完成。

      如果你对此更加好奇,我也写了一篇关于这个主题的博客文章。它有一些more details

答案 2 :(得分:1)

UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] init];
backButtonItem.title = NSLocalizedString(@"Back", nil);
self.navigationItem.backBarButtonItem = backButtonItem;

答案 3 :(得分:0)

它对我有用:

[self.navigationItem.leftBarButtonItem setTitle:@"Back"];

(后箭头图片和自定义文字)