0

我编写了一些代码,根据选择的按钮切换 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 设置为它们的操作,并且该函数每次单击仅调用一次。

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

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

4

1 回答 1

2

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

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


现在关于imageView财产,文档指出:

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

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

讨论

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

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

即使按钮尚未显示,imageView 属性也会返回一个值。对于系统按钮,该属性的值为 nil。

于 2013-02-26T11:41:20.913 回答