按下其他按钮后无法更改uibutton的图像

Posted

技术标签:

【中文标题】按下其他按钮后无法更改uibutton的图像【英文标题】:can't change image of uibutton after pressing other buttons 【发布时间】:2016-01-19 20:16:38 【问题描述】:

我有 2 个按钮,即使它们被释放,它们也会与按下的图像保持一致,直到按下另一个按钮,然后图像返回到正常图像我的代码是这样的:

    - (IBAction)button1_touch:(UIButton *)sender


    [Button2 setImage:[UIImage imageNamed:@"b2Released.png"] forState:UIControlStateNormal];

    [Button1 setImage:[UIImage imageNamed:@"b1Pressed.png"] forState:UIControlStateNormal];    


- (IBAction)button2_touch:(UIButton *)sender

    [Button1 setImage:[UIImage imageNamed:@"b1Released.png"] forState:UIControlStateNormal];

    [Button2 setImage:[UIImage imageNamed:@"b2Pressed.png"] forState:UIControlStateNormal]; 



上面的代码在应用程序启动时工作正常,行为是预期按下两个按钮,图像正确更改,但是当我按下这两个按钮以外的其他按钮时,“Button2”一旦获得“B2Pressed.png”图像,它永远不会返回到其发布的图像,我在 button1_touch 中写了一个 nslog 并按预期打印,并且 Button1 获取其按下的图像,但 Button2 没有获取其发布的图像,就像 UiButton 的方法 setImage 被破坏时我按下了这两个以外的其他按钮,其他按钮独立于这两个,对我来说这种行为完全没有意义,会不会是 xcode 坏了?我正在开发 xcode 7.2

编辑: 仅当该按钮具有分配给它的动作选择器(UIControlEventTouchUpInside)时,当我按下另一个按钮时才会出现问题。

【问题讨论】:

【参考方案1】:

您可以为此目的使用 UIButton 的selected 状态:

- (void)viewDidLoad 
    // ...
    // the place where you do buttons setup
    [button1 setImage:[UIImage imageNamed:@"b1Released"] forState:UIControlStateNormal];
    [button1 setImage:[UIImage imageNamed:@"b1Pressed"] forState:UIControlStateSelected];
    [button2 setImage:[UIImage imageNamed:@"b2Released"] forState:UIControlStateNormal];
    [button2 setImage:[UIImage imageNamed:@"b2Pressed"] forState:UIControlStateSelected];
    

- (IBAction)firstButtonTouch:(UIButton *)sender 
    button1.selected = YES;
    button2.selected = NO;


- (IBAction)secondButtonTouch:(UIButton *)sender 
    button1.selected = NO;
    button2.selected = YES;

【讨论】:

以上是关于按下其他按钮后无法更改uibutton的图像的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中按下 uibutton 时更改色调图像颜色

按下时更改图像的 UIButton - 但更改图像时效果不佳

使用 UIButton 自定义 UITableViewCell:无法更改 UIImage

UIButton 在焦点上将图像更改回原始图像(tvOS)

使用swift更改动画块内的UIbutton

iphone uibutton:我想更改 UIControlStateNormal 图像