【问题标题】:UIBarButtomItem image highlightedUIBarButtonItem 图像突出显示
【发布时间】:2014-01-24 01:42:01
【问题描述】:

当用户使用此代码按下UIBarButtomItem 时,我正在尝试设置不同的图像(突出显示):

self.addButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"addButton"]
                                                  style:UIBarButtonItemStylePlain
                                                 target:self
                                                 action:@selector(addAlert:)];
[self.addButton setBackgroundImage:[UIImage imageNamed:@"addButtonHigh"]
                              forState:UIControlStateSelected
                            barMetrics:UIBarMetricsDefault];
self.navigationItem.rightBarButtonItem = self.addButton;

但它不起作用。

按钮与“addButton”图像一起出现,但按下时“addButtonHigh”图像不会出现。

提前谢谢你, 维克多

【问题讨论】:

  • 来自 IOS 文档:UIControlStateSelected 控件的选定状态。对于许多控件,此状态对行为或外观没有影响。但是其他子类(例如,UISegmentedControl 类)可能具有不同的外观,具体取决于它们选择的状态。您可以通过选定的属性检索和设置此值。 @Chancy 的答案就是你想要的。
  • @simalone 尝试失败。

标签: ios objective-c navbar appearance uibuttonbaritem


【解决方案1】:

将 UIControlState 从 UIControlStateSelected 更改为 UIControlStateHighlighted。如果要更改突出显示的背景图像。您需要更改 UIControlState。

以下是sn -p i 测试的代码。它有效。

self.addButton = [[UIBarButtonItem alloc] initWithTitle:@"hello" style:UIBarButtonItemStylePlain target:self action:@selector(addAlert:)];

[self.addButton setBackgroundImage:[UIImage imageNamed:@"font_minus_32.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[self.addButton setBackgroundImage:[UIImage imageNamed:@"font_plus_32.png"] forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

self.navigationItem.rightBarButtonItem = self.addButton;

也许下面的代码就是你想要的代码。

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setBackgroundImage:[UIImage imageNamed:@"font_minus_32.png"] forState:UIControlStateNormal];
[btn setBackgroundImage:[UIImage imageNamed:@"font_plus_32.png"] forState:UIControlStateHighlighted];
[btn addTarget:self action:@selector(addAlert:) forControlEvents:UIControlEventTouchUpInside];
[btn sizeToFit];

self.addButton = [[UIBarButtonItem alloc] initWithCustomView:btn];
self.navigationItem.rightBarButtonItem = self.addButton;

【讨论】:

  • @user3175572 我更新了我的答案。我为两个 UIControlState 设置了背景图像。当我突出显示按钮时它发生了变化。你可以试试这个。
【解决方案2】:
- (IBAction)buttonClicked:(id)sender 
{

UIImage *buttonImage = [UIImage imageNamed:@"home.png"];
[myButton setBackgroundImage:buttonImage forState:UIControlStateHighlighted];

}

UIControlStateHighlighted 控件的突出显示状态。当在跟踪过程中触摸进入和退出以及发生触摸事件时,控件将进入此状态。您可以通过突出显示的属性检索和设置此值。

UIControlStateSelected 控件的选定状态。对于许多控件,此状态对行为或外观没有影响。但是其他子类(例如,UISegmentedControl 类)可能具有不同的外观,具体取决于它们选择的状态。您可以通过 selected 属性检索和设置此值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2016-03-19
    相关资源
    最近更新 更多