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]; 
} 
+0

感谢布拉德,我认为这是得到了它 - 差不多。一个轻微的怪异仍然存在:当我点击按钮并切换时,出于某种原因它会在图像周围创建一个轮廓。例如,当按钮是红色的,点击它时,它会变成蓝色,但在边缘留下红色轮廓。看起来,红色图像(与蓝色图像大小相同)略微放大并放置在蓝色背景后面的背景中。如果我关闭视图并重新打开,它看起来很好。奇怪的。我会玩这个,但随时分享想法。 – Aeonaut 2010-07-16 23:10:47

+0

4我要检查的东西: #1确保按钮是键入自定义,而不是RoundedRect。 #2请确保您的PNG真的是相同的大小,并没有缩放发生。 (图像的像素大小应该与按钮的框架相同(或者对于iPhone4而言完全是两倍)。) #3您可以临时在按钮上设置背景颜色(button.backgroundColor = [UIColor purpleColor])以确保您的图像真正走向边缘,并且您看到的框实际上来自其中一个图像文件,而不是来自视图层次结构中的其他内容。 – 2010-07-17 00:47:43