【问题标题】:Unable to change text and text color of navigationitem's back button无法更改导航项的后退按钮的文本和文本颜色
【发布时间】:2011-07-24 16:43:17
【问题描述】:

我正在尝试使用下面的代码设置导航栏的后退按钮文本颜色(红色)。 (注意:下面的代码已经在'previous'视图控制器中,在这种情况下在'Popular'视图控制器中:

//Customize Back button
UIView *backButtonView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 30, 40)];
UILabel *backButtonLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 30, 40)];
backButtonLabel.text = @"back";
backButtonLabel.textColor = [UIColor colorWithHexString:@"cf212a"];
[backButtonView addSubview:backButtonLabel];

UIBarButtonItem *backButton = [[UIBarButtonItem alloc]initWithCustomView:backButtonView];
self.navigationItem.backBarButtonItem = backButton;

但是,我没有得到我想要的效果。我仍然在后退按钮中获得默认的白色文本。文本也没有更改为“返回”

我该如何解决这个问题?

【问题讨论】:

    标签: iphone objective-c ios uinavigationbar back-button


    【解决方案1】:

    那是因为 backbuttonitem 是一个 uibarbuttonitem,它将在下一个视图控制器上看到,它将被推送到当前视图控制器而不是当前视图控制器的顶部。

    如果您想设置当前视图的后退按钮,就像您在上面的代码中尝试做的那样,而不仅仅是将代码移动到它之前显示的视图控制器(在堆栈中它的下方)。这样当您按下要显示在前一个视图控制器中设置的自定义后退按钮的视图控制器。这是因为后退按钮属于前一个视图控制器,它将推动您的新视图控制器......

    【讨论】:

    • 上面的代码已经添加到之前的视图控制器中,但我仍然无法更改后退按钮。我添加自定义视图 (backButtonView) 的方式是否正确?
    • 您可以尝试使用普通的 uibarbuttonitem,然后转到自定义视图,看看是否有区别。
    【解决方案2】:

    我相信只有title 属性在后退按钮项中很重要;它可以让您在中间有一个长标题,在后退按钮中有一个较短的标题。

    添加自定义“后退按钮”最简单的方法是设置UINavigationItem.leftBarButtonItem;你必须适当地设置它的目标/动作。

    【讨论】:

    • 我有多个视图控制器,这使得一个一个自定义“后退按钮”效率极低。此外,多个视图控制器可以调用另一个视图控制器,在这种情况下如何设置目标/动作?
    • 目标是“自我”,动作是从导航控制器弹出的东西,大概。可能还有涉及 UINavigationBar 上的类别的 hacky 方式,但我不会去那里。
    【解决方案3】:

    我只是组合了一个简单的UIViewController 子类,它添加了一个可自定义的后退按钮,允许您更改文本颜色。它基本上添加了一些willAppear/willDisappear 逻辑来为后退按钮设置动画,就像UINavigationController 在使用leftBarButtonItem 属性时所做的那样。

    https://github.com/typeoneerror/BBCustomBackButtonViewController

    【讨论】:

      【解决方案4】:

      这对我有用。

      使用它您可以更改所有导航按钮的颜色:

      [[UIBarButtonItem appearance] setTintColor:[UIColor redColor]];

      将 redColor 替换为以下内容以调整按钮的颜色:

      colorWithRed:0/255.0 green:144/255.0 blue:200/255.0 alpha:1.0// pick your color using this
      

      一定要把它放在推送的视图控制器中。不是您想要查看此后退按钮颜色的视图控制器。就像 Robin 解释的那样。

      【讨论】:

        【解决方案5】:

        我发现在全局或本地设置它的最佳方式是

            [[UIBarItem appearance] setTitleTextAttributes:
                 [NSDictionary dictionaryWithObjectsAndKeys:
                 [UIColor colorWithRed:220.0/255.0 green:104.0/255.0 blue:1.0/255.0 alpha:1.0], UITextAttributeTextColor, 
                 [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0], UITextAttributeTextShadowColor, 
                 [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset, 
                 [UIFont fontWithName:@"AmericanTypewriter" size:0.0], UITextAttributeFont, 
              nil] 
                forState:UIControlStateNormal];
        

        【讨论】:

          【解决方案6】:

          问题是您没有在全局级别设置后退按钮的字体和颜色的好方法。这是在当前的 iOS 5 中。为此,我使用 typeoneerror 的 https://github.com/typeoneerror/BBCustomBackButtonViewController 这里提到。

          但是,有一种很好的方法可以在全局级别设置导航栏按钮的文本和色调颜色属性,而不会破坏其他按钮和菜单的外观。我正在使用如下代码:

          [[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleColor:[UIColor colorWithRed:102.0f/255.0f green:102.0f/255.0f blue:102.0f/255.0f alpha:1.0f] forState:UIControlStateNormal];
          [[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleShadowColor:[UIColor colorWithWhite:1.0 alpha:0.75] forState:UIControlStateNormal];
          [[[UIButton appearanceWhenContainedIn:[UINavigationBar class], nil] titleLabel] setShadowOffset:CGSizeMake(1.0, 1.0)];
          

          在我的一个项目中。我是从- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 打来的

          【讨论】:

            【解决方案7】:
            self.navigationItem.backBarButtonItem.tintColor = [UIColor blackColor];
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-07-01
              • 2015-04-28
              • 1970-01-01
              • 2019-02-26
              • 1970-01-01
              相关资源
              最近更新 更多