无法更新UIButton图像

时间:2014-01-09 04:57:12

标签: objective-c uiscrollview uibutton

我在这里疯了。我有一个按钮,带有一个复选标记作为其图像。我已将代码简化为单击按钮的简单用户操作,该操作应替换背景图像。但是它的形象不会改变。

- (IBAction)sendResults:(UIButton *)sender
{
    UIImage *image = [UIImage imageNamed:@"unchecked_checkbox"];
    if (image){
        NSLog(@"image is good");
        [self.resultsCheckBox setBackgroundImage:image forState:UIControlStateNormal];
    } else {
        NSLog(@"problem");
    }
}

以下是控制台输出:image is good

是的,复选框有一个插座。我已经证实它是正确的。

我甚至尝试将图像设置为nil,但它仍然没有消失!

有什么想法?谢谢!

3 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为您正在更改UIButton的图像

UIImage *image = [UIImage imageNamed:@"checked_checkbox.png"];
[btn setImage:image forState:UIControlStateNormal];

在更改背景之前

  

[btn setBackgroundImage:[UIImage imageNamed:@“unchecked_checkbox.png”]   forState:UIControlStateNormal];

您应该一次只更改setBackgroundImage:或setImage:

BackgroundImage位于UIButton的图像层

之下

答案 1 :(得分:0)

首先包括图像文件的扩展名(.png,.jpeg)。

UIImage *image = [UIImage imageNamed:@"unchecked_checkbox.png"];

然后尝试

if (image)
 {
    NSLog(@"image is good");

    if(self.resultsCheckBox){
        [self.resultsCheckBox setBackgroundImage:nil forState:UIControlStateNormal];
        [self.resultsCheckBox setBackgroundImage:image forState:UIControlStateNormal];
        [self.view bringSubviewToFront:self.resultsCheckBox];
     }
    else{
       NSLog(@"self.resultsCheckBox not found");
    }

    } else
    {
       NSLog(@"problem");
    }

或尝试这些所有选项

[self.resultsCheckBox setBackgroundImage:image forState:UIControlStateNormal]; 
[self.resultsCheckBox setBackgroundImage:image forState:UIControlStateHighlighted]; 
[self.resultsCheckBox setBackgroundImage:image forState:UIControlStateDisabled]; 
[self.resultsCheckBox setBackgroundImage:image forState:UIControlStateSelected]; 
[self.resultsCheckBox setBackgroundImage:image forState:UIControlStateApplication]; 
[self.resultsCheckBox setBackgroundImage:image forState: UIControlStateReserved];

答案 2 :(得分:0)

我必须做的是将UIImage放在(透明)UIButton后面,这是我可以改变的图像:
[self.imageView setImage:chosenImage];
[self.imageView setNeedsDisplay];

希望它有所帮助。