UINavigationController 的自定义修剪后退按钮文本

Posted

技术标签:

【中文标题】UINavigationController 的自定义修剪后退按钮文本【英文标题】:Custom Trimming Back button text of UINavigationController 【发布时间】:2014-11-10 04:43:30 【问题描述】:

环境

我正在为我的 ios 应用开发应用内区域设置更改支持。 这比听起来要难,因为UIKit 提供的控件语言环境与 iOS 语言环境相关联。

我几乎可以解决问题,但现在还剩下一件事:

问题

当我们使用 UINavigationController 推送视图控制器时。 它会自动生成带有前一个视图控制器的导航项标题的后退按钮项。

但是,如果标题太长而无法作为后退按钮显示,UINavigationController 使用 Back 作为后备标题。 自动缩短标题(后退)与系统语言环境相关。这是我的问题。

我可以合法地改变这种行为吗?

【问题讨论】:

【参考方案1】:

我自定义了UINavigationController 并覆盖了pushViewController:animated:

-(void)pushViewController:(UIViewController *)viewController
                 animated:(BOOL)animated

    UINavigationItem* current = self.topViewController.navigationItem;

    if(current.backBarButtonItem == nil)
        current.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:current.title style:UIBarButtonItemStylePlain target:nil action:nil];
    

    UIBarButtonItem* backItem = current.backBarButtonItem;
    CGFloat width = [backItem.title sizeWithAttributes:@].width;

    // Trimming to localized back text
    if(width > 70)
        backItem.title = [[KKCoreLocale shared] localizedStringForKey:@"Back"];
    

    [super pushViewController:viewController animated:animated];

我不能确定这是最好的解决方案,但是它是合法的并且很有魅力。

【讨论】:

以上是关于UINavigationController 的自定义修剪后退按钮文本的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式在 UINavigationController 中设置 UINavigationBar 的自定义子类

访问 UIViewController 中的自定义 UINavigationController 属性和方法

使用 UINavigationController 默认 UIToolbar 的自定义背景

带有按钮的自定义 UINavigationController

UINavigationController 的自定义动画推送未正确呈现导航栏

使用带有子类 UINavigationController 的自定义 iOS 7 过渡偶尔会导致黑屏