UIButton 图像仅更改一个按钮

Posted

技术标签:

【中文标题】UIButton 图像仅更改一个按钮【英文标题】:UIButton image only changes for one button 【发布时间】:2013-02-26 11:30:13 【问题描述】:

我编写了一些代码,根据选择的按钮切换 2 个按钮。如果选择了英国,则它会打勾,而 BR 则不打勾,反之亦然。然而,这似乎只是英国按钮的情况。如果我选择 BR 按钮而不是 UK 按钮取消勾选,则 BR 按钮会短暂勾选,但随后会再次取消勾选。

我已经正确地连接了我的按钮(我已经检查了三次),并且当 BR 按钮短暂滴答时,它肯定是连接起来的。我使用的代码如下:

.h

@property (weak) IBOutlet UIButton *btUK;
@property (weak) IBOutlet UIButton *btBR;

.m

- (IBAction)changePortal:(id)sender

    UIButton *button = (UIButton *)sender;

    if (button.tag == kUKButton)
    
        self.btUK.imageView.image = [UIImage imageNamed:@"tick_box.png"];
        self.btBR.imageView.image = [UIImage imageNamed:@"tick_box_empty.png"];
        [Singleton sharedSingleton].bUseUKPortal = YES;
    
    else if (button.tag == kBRButton)
    
        self.btBR.imageView.image = [UIImage imageNamed:@"tick_box.png"];
        self.btUK.imageView.image = [UIImage imageNamed:@"tick_box_empty.png"];
        [Singleton sharedSingleton].bUseUKPortal = NO;
    

我在代码中设置了断点,并确认两个按钮在单击时都会进入其相关部分。我还可以确认没有其他代码在使用 btUK 和 btBR 变量,因为我刚刚写了所有代码。

两个按钮都将 changePortal 设置为它们的操作,并且每次点击该函数只会调用一次。

我也尝试过清理代码,但这并没有解决我的问题。

如果有人能解释为什么会发生这种情况,我将不胜感激。

【问题讨论】:

【参考方案1】:

设置UIButton 的图像的正确方法是调用setImage:forState:。 所以试着把你的代码改成这样:

// Follow this pattern for every button image change
[self.btUK setImage:[UIImage imageNamed:@"tick_box.png"] forState:UIControlStateNormal];


现在关于 imageView 属性,documentation 声明:

按钮的图像视图。 (只读)

@property(nonatomic, readonly, retain) UIImageView *imageView

讨论

虽然这个属性是只读的,但它自己的属性是 读/写。使用这些属性来配置外观和 按钮视图的行为。例如:

UIButton *button = [UIButton buttonWithType: UIButtonTypeRoundedRect];
button.imageView.exclusiveTouch = YES;

即使按钮没有被按下,imageView 属性也会返回一个值 尚未显示。系统按钮的属性值为 nil。

【讨论】:

完美运行,谢谢。我假设英国的一个运行正常,代码是正确的。谢谢

以上是关于UIButton 图像仅更改一个按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何在导航栏上的 UIBarButtonItem 内偏移 UIButton 图像?

UIButton 背景图像从另一个按钮更改

如何仅处理 UIButton 的图像内容,而不是按钮本身

UIButton 内的 UIImageView 具有默认填充 - 如何删除?

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

Swift:如何在单击提交按钮时更改 UIButton 图像