UIButton图像/背景图像古怪
问题描述:
我的视图控制器中有一个自定义的UIButton,它应该有一个红色或蓝色的心形图像,这取决于视图控制器加载时的变量值。如果用户点击按钮,它将更改域模型中的红/蓝值,并且还应该切换按钮图像。UIButton图像/背景图像古怪
if ([self.color isBlue])
self.colorButton.imageview.image = [UIImage imageNamed:@"blueHeart.png"];
else
self.colorButton.imageview.image = [UIImage imageNamed:@"redHeart.png"];
但我不能让它改变颜色,当我按下按钮:如果我在viewWillAppear中调用下面的代码的按钮颜色将正确加载。当按下按钮,我toggleColor:操作方法被称为:
- (IBAction)toggleColor:(id)sender
{
if ([self.color isBlue])
{
[self.color makeRed];
self.colorButton.imageView.image = [UIImage imageNamed:@"redHeart.png"];
}
else
{
[self.color makeBlue];
self.colorButton.imageView.image = [UIImage imageNamed:@"blueHeart.png"];
}
}
该值在color
变量更新,因为他们是应该的,但按钮的颜色没有变化。 (我已经在调试器中验证了所有代码行都是按照它们应该执行的。)我试过使用[button setImage: forState:]
和[button setBackgroundImage: forState:]
,但它们的行为并不像预期的那样。有人可以请我走过ViewWillAppear :(或ViewDidLoad :)方法和toggleColor:方法的步骤吗?我在这里错过了一些东西。
答
这为我工作:
- (void) viewDidLoad {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(50, 40, 30, 30);
[button setImage:[UIImage imageNamed:@"red.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"blue.png"] forState:UIControlStateSelected];
[button addTarget:self action:@selector(toggleButtonImages:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
-(void) toggleButtonImages:(UIButton *)button {
UIImage *temp = [button imageForState:UIControlStateNormal];
[button setImage:[button imageForState:UIControlStateSelected] forState:UIControlStateNormal];
[button setImage:temp forState:UIControlStateSelected];
}
感谢布拉德,我认为这是得到了它 - 差不多。一个轻微的怪异仍然存在:当我点击按钮并切换时,出于某种原因它会在图像周围创建一个轮廓。例如,当按钮是红色的,点击它时,它会变成蓝色,但在边缘留下红色轮廓。看起来,红色图像(与蓝色图像大小相同)略微放大并放置在蓝色背景后面的背景中。如果我关闭视图并重新打开,它看起来很好。奇怪的。我会玩这个,但随时分享想法。 – Aeonaut 2010-07-16 23:10:47
4我要检查的东西: #1确保按钮是键入自定义,而不是RoundedRect。 #2请确保您的PNG真的是相同的大小,并没有缩放发生。 (图像的像素大小应该与按钮的框架相同(或者对于iPhone4而言完全是两倍)。) #3您可以临时在按钮上设置背景颜色(button.backgroundColor = [UIColor purpleColor])以确保您的图像真正走向边缘,并且您看到的框实际上来自其中一个图像文件,而不是来自视图层次结构中的其他内容。 – 2010-07-17 00:47:43