【问题标题】:Can't change the background for UIBarButtonItem无法更改 UIBarButtonItem 的背景
【发布时间】:2013-12-16 08:08:19
【问题描述】:

我需要在一个 ViewController 中更改 UIBarButtonItem 的默认背景(已在我的 AppDelegate 中声明)。

所以,在我的 AppDelegate 中,我有:

UIImage *navBarItemBackground = [UIImage imageNamed:@"navbar_button_green"];
[[UIBarButtonItem appearance] setBackgroundImage:navBarItemBackground
                                            forState:UIControlStateNormal
                                               style:UIBarButtonItemStyleBordered
                                          barMetrics:UIBarMetricsDefault];

当我需要恢复按钮的默认背景时 - 我在我的 viewController 中实现:

self.navigationItem.rightBarButtonItem = nil;
UIBarButtonItem *rightBarItem = [[UIBarButtonItem alloc] initWithTitle:@"Сохранить" style:UIBarButtonItemStyleBordered target:self action:@selector(clickOnSend:)];
[rightBarItem setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal style:UIBarButtonItemStyleBordered barMetrics:UIBarMetricsDefault];
self.navigationItem.rightBarButtonItem = rightBarItem;

但我认为将空文件设置为图像是不正确的。有没有更简单的方法来实现这种行为?谢谢!

【问题讨论】:

    标签: ios objective-c uibarbuttonitem uiappearance


    【解决方案1】:

    如果您只想更改一个或多个UIViewController'sUIBarButtonItems backgroundImage,您最好更改特定的UIViewControllers,因为您使用的是后一种情况。而[[UIBarButtonItem appearance] setBackgroundImage:forState:style:barMetrics:]; 将更改所有UIBarButtonItems 背景图像,这可能不是更好的。

    【讨论】:

    • 是的,第二部分代码放在单独的viewController中。但我需要为这个按钮保留默认的 iOS6 背景,而对于所有其他按钮,我需要用外观更改背景。
    • @ShurupuS 然后你只需将 nil 传递给 image 参数,它应该可以工作。
    • 是的——它有效,只是尝试使用这个解决方案——不,代码看起来有点简单。谢谢!
    【解决方案2】:

    你应该把你的代码改成这样:

    UIBarButtonItem * rightBarItem = [[UIBarButtonItem alloc]
                                               initWithTitle: @"Сохранить"
                                               style: UIBarButtonItemStyleBordered
                                               target: nil action: nil];
    UIImage *navBarItemBackground = [[UIImage imageNamed:@"navbar_button_green"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 6)];
    [[UIBarButtonItem appearance] setBackgroundImage:navBarItemBackground
                                                    forState:UIControlStateNormal
                                                  barMetrics:UIBarMetricsDefault];
    
    [self.navigationItem setBackBarButtonItem: rightBarItem];
    

    【讨论】:

    • 我需要在一个viewController中只保留一个barButton-其他按钮应该随着外观而改变。
    • 应用此代码更改所有按钮,并将没有[UIBarButtonItem外观]的特定代码用于需要默认按钮的viewController。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2022-11-06
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多