【问题标题】:UIButton image not updating properly when changing states更改状态时 UIButton 图像未正确更新
【发布时间】:2015-03-26 00:12:46
【问题描述】:

所以我正在创建一个 UIButton,我想将它设置为具有两个不同状态(正常和突出显示)的单独图像,但是当将 highlight 属性设置为 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] 但出现了同样的问题。在将 isHighlighted 设置为 YES 之前,我还尝试将 normal_state 图像设置为 nil,但无论 normal_state 图像保持什么,highlight_state 图像都被绘制在它上面。

【问题讨论】:

  • 为什么还要设置选中状态?
  • 为了在一个状态的单个按钮上显示两个图像,您使用 [button setImage:[UIImage imageNamed:@"image1"] forState:UIControlStateHighlighted]; [按钮 setBackgroundImage:[UIImage imageNamed:@"image1"] forState:UIControlStateHighlighted];
  • 尝试从[button setImage:[UIImage imageNamed:@"image2.jpg"] forButtonState:UIControlStateSelected]; [button setImage:[UIImage imageNamed:@"image2.jpg"] forButtonState:UIControlStateHighlighted]; 中删除.jpg 并在buttonPressed: 中仅尝试一种方法

标签: ios objective-c iphone uiimage uikit


【解决方案1】:
    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];

}

如果您设置两种状态,即 [sender setSelected:YES];[sender setHighlighted:YES];,您可以一次设置一个按钮状态,即 Normal/Highlighted/Selected一次。编译器根据最后一行自动工作,即 [sender setHighlighted:YES] 和 make [sender setSelected:NO];这就是为什么它在按钮上只显示突出显示的图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-01
    • 2014-01-23
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多