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 图像?