【问题标题】:How set set title to leftBarButtonItem如何将设置标题设置为 leftBarButtonItem
【发布时间】:2012-03-16 03:53:31
【问题描述】:

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

这无济于事

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

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

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

【问题讨论】:

标签: objective-c ios push backbarbuttonitem


【解决方案1】:

来自 Apple 的文档:

backBarButtonItem

在需要返回按钮时使用的条形按钮项 导航栏。

@property(nonatomic, 保留) UIBarButtonItem *backBarButtonItem 讨论

当此导航项紧挨在顶部项的下方时 堆栈,导航控制器为 此导航项的导航栏。当此属性为零时, 导航项使用其标题属性中的值来创建一个 适当的后退按钮。 如果您想指定自定义图片或 后退按钮的标题,您可以分配自定义栏按钮项 (使用您的自定义标题或图片)改为此属性。什么时候 配置您的栏按钮项目,不要为其分配自定义视图; 导航项忽略后栏按钮中的自定义视图 无论如何。

因此,您可以创建 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:)];

【讨论】:

    【解决方案2】:

    今天终于把这里面的所有皱纹都弄清楚了,比上面还要简单。

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

    如果文本始终相同:

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

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

    如果文本是动态的:

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

    再一次,你完成了。

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

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

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

    如果您对此更加好奇,我也刚刚写了一篇关于该主题的博文。它有一些more details

    【讨论】:

      【解决方案3】:
      UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] init];
      backButtonItem.title = NSLocalizedString(@"Back", nil);
      self.navigationItem.backBarButtonItem = backButtonItem;
      

      【讨论】:

      • UINavigationItem 的属性 backBarButtonItem 采用 UIBarButtonItem 类型而不是 NSString 类型的实例。这样做很可能会导致崩溃。
      • 你是对的,对不起,我从我的代码中复制它时出错了。
      【解决方案4】:

      它对我有用:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多