2

我有ViewController 和详细的ViewController。当我推送到 detailViewController 时,我得到 leftBarButtonItem,其标题来自根目录。但我希望标题只是“返回”,仅此而已。那么该怎么做呢?

这没有帮助

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

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

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

4

4 回答 4

7

来自苹果的文档:

backBarButtonItem

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

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

当此导航项位于堆栈顶部项的正下方时,导航控制器会从此导航项派生导航栏的后退按钮。当此属性为 nil 时,导航项使用其 title 属性中的值来创建适当的后退按钮。如果要为后退按钮指定自定义图像或标题,则可以将自定义栏按钮项(带有自定义标题或图像)分配给此属性。在配置你的 bar button item 时,不要为其分配自定义视图;导航项无论如何都会忽略后退栏按钮中的自定义视图。

因此,您可以创建您的 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:)];
于 2012-02-26T11:38:33.980 回答
6

我今天终于弄清楚了所有的皱纹,它比上面更简单。

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

如果文本始终相同:

  1. 在编辑器中选择父视图控制器的导航项。
  2. 将文本放入Back Button值。

这样你就完成了。当这个视图控制器被一个新的视图控制器推到一边时,这个新的视图控制器将把这个文本作为它的标题。

如果文本是动态的:

  1. 在编辑器中选择父视图控制器的导航项。
  2. 一些文本放入Back Button值。
  3. 在父视图控制器中设置应该更改的标题:self.navigationItem.backBarButtonItem.title = dynamicText;

而且,你又完成了。

需要明确的是,您可以随时在父视图控制器中进行设置。它只会在另一个视图控制器被推送时显示。

如果不把文字放在设计器的Back Button中,实例化视图控制器的过程就不会创建self.navigationItem.backBarButtonItem,也不能设置nil对象的标题。我相信这就是所有与此相关的困惑的根源。

当然,您可以在运行时创建它,但是如果您已经在情节提要/笔尖中完成了大部分工作,那么让解码器为您完成它会更容易。

如果您对此更好奇,我也刚刚写了一篇关于该主题的博客文章。它有更多细节

于 2013-10-18T03:37:19.857 回答
1
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] init];
backButtonItem.title = NSLocalizedString(@"Back", nil);
self.navigationItem.backBarButtonItem = backButtonItem;
于 2012-02-26T12:33:49.680 回答
0

这个对我有用:

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

(后退箭头图像和自定义文本)

于 2015-01-27T12:39:01.763 回答