【问题标题】:Can't change the background for UIBarButtonItem in a separate View Controller无法在单独的视图控制器中更改 UIBarButtonItem 的背景
【发布时间】:2013-11-27 06:28:18
【问题描述】:

在我的 appDelegate 中:

UIImage *navBarArrowItemBackground = [UIImage imageNamed:@"tabbar_button_back"];
[UIBarButtonItem appearance] setBackButtonBackgroundImage:navBarArrowItemBackground
                                                          forState:UIControlStateNormal
                                                        barMetrics:UIBarMetricsDefault];

在单独的视图控制器中:

UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self
                                                                      action:nil];
[backButton setBackgroundImage:[UIImage imageNamed:@"tabbar_button_back_gray"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[self.navigationItem setBackBarButtonItem:backButton];

因此,在子视图控制器上,后退按钮的标题已更改,但背景取自 appDelegate 中的外观。我需要一个视图控制器的自定义背景。我该如何解决这个问题?

编辑#1:

现在 appDelegate 看起来像这样:

UIImage *navBarArrowItemBackground = [UIImage imageNamed:@"tabbar_button_back"];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:navBarArrowItemBackground
                                                          forState:UIControlStateNormal
                                                        barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearanceWhenContainedIn:[SettingsListViewController class], nil] setBackButtonBackgroundImage: [UIImage imageNamed:@"tabbar_button_back_gray"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

【问题讨论】:

  • 检查你的导航栏不应该是零。

标签: ios objective-c uibarbuttonitem appearance


【解决方案1】:

您可以通过向外观添加约束来实现这一点,如下所示:

[UIBarButtonItem appearanceWhenContainedIn:[YourOtherVC class], nil] setBackButtonBackgroundImage:navBarArrowItemBackground
                                  forState:UIControlStateNormal
                                barMetrics:UIBarMetricsDefault];

您的代码应如下所示:

UIImage *navBarArrowItemBackground = [UIImage imageNamed:@"tabbar_button_back"];
[[UIBarButtonItem appearanceWhenContainedIn:[SettingsListViewController class], nil] setBackButtonBackgroundImage: [UIImage imageNamed:@"tabbar_button_back_gray"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

【讨论】:

  • 不错的解决方案,但无济于事 - 背景是一样的..无法理解出了什么问题..
  • 请使用以下代码: UIImage *navBarArrowItemBackground = [UIImage imageNamed:@"tabbar_button_back"]; [[UIBarButtonItem appearanceWhenContainedIn:[SettingsListViewController class], nil] setBackButtonBackgroundImage: [UIImage imageNamed:@"tabbar_button_back_gray"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
  • 不要同时写两个语句。
  • 现在所有视图控制器都有默认背景了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多