更改状态时,UIButton图像无法正确更新

时间:2015-01-27 11:32:09

标签: ios objective-c iphone uiimage uikit

所以我正在创建一个UIButton,我想将它设置为具有两个不同状态(正常和突出显示)的单独图像,但是当将突出显示的属性设置为yes时,突出显示的图像将绘制在正常状态图像之上而不是完全替换它。

这是我的代码:

    CGFloat size = 50.0;
    CGRect frame = CGRectMake(0, 0, size, size);
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setBackgroundColor:[UIColor clearColor]];
    [button setFrame:frame];

    [button setImage:[UIImage imageNamed:@"image1"]forButtonState:UIControlStateNormal];
    [button setImage:[UIImage imageNamed:@"image2.jpg"] forButtonState:UIControlStateSelected];
    [button setImage:[UIImage imageNamed:@"image2.jpg"] forButtonState:UIControlStateHighlighted];

    [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];

    [self addSubview:button];


-(void)buttonPressed:(UIButton *)sender
{
    [sender setSelected:YES];
    [sender setHighlighted:YES];
}

我尝试过使用[button setImage]和[button setBackgroundImage],但同样的问题出现了。我还尝试将normal_state图像设置为nil,然后将设置isHighlighted设置为YES,但无论normal_state图像保持什么,并且highlight_state图像都在其上方绘制。

1 个答案:

答案 0 :(得分:0)

    CGFloat size = 50.0;
    CGRect frame = CGRectMake(100, 100, size, size);
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setBackgroundColor:[UIColor clearColor]];
    [button setFrame:frame];

    [button setImage:[UIImage imageNamed:@"image1"] forState:UIControlStateNormal];
    [button setImage:[UIImage imageNamed:@"image1"] forState:UIControlStateSelected];
    [button setImage:[UIImage imageNamed:@"image1"] forState:UIControlStateHighlighted];

[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
 [self.view addSubview:button];

-(void)buttonPressed:(UIButton *)sender{

        [sender setSelected:NO];
        [sender setHighlighted:YES];

}

如果您设置了两个状态,即[发送者setSelected:YES]; [sender setHighlighted:YES],您可以一次创建一个按钮状态,即正常/突出显示/选择。在一次。编译器根据最后一行自动工作,即[sender setHighlighted:YES]并使[sender setSelected:NO];这就是为什么它只显示按钮上突出显示的图像。