如何在UIControlState上更改UIButton的背景颜色

时间:2014-08-07 10:19:39

标签: ios objective-c uibutton storyboard

我有一个UIButton,目前将背景颜色设置为清除并设置背景图像,如下所示:

[[currentDay setBackgroundColor:[UIColor clearColor];
[currentDay setBackgroundImage:[UIImage imageNamed:@"done.png"] forState:UIControlStateSelected];

我想在未选择按钮时将背景颜色设置回故事板上设置的原始背景颜色。

您可能认为forState属性会有setBackgroundColor,但似乎没有。{/ p>

示例:

[[currentDay setBackgroundColor:[[UIColor clearColor] forState:UIControlStateSelected];
如果它存在,那将是理想的,是否有以上相同的?以编程方式获取每个单独的背景颜色并重新设置它并不可行。

我还尝试将按钮本身设置为隐藏,如果选择此按钮作为尝试隐藏backgroundColor而不是像这样更改它:

if ([currentDay isSelected]) {
    [currentDay setAlpha:0];
} else {
    [currentDay setAlpha:1];
}

成功隐藏了选择按钮但是,你不能再点击它以显示它,因为我猜按钮消失了,我上面的图像也消失了。

任何帮助都非常感激。

2 个答案:

答案 0 :(得分:0)

将此复选标记放在您的按钮点击事件中。当第一次按下按钮时完美工作然后进入未选中,然后在第二次点击后转到已选择

默认设置按钮背景的红色。

-(IBAction)ClickBtn:(UIButton *)sender
{
    sender.selected  = ! sender.selected;

    if (sender.selected)
    {
        NSLog(@"Set Background Green color");
    }
    else
    {
       NSLog(@"Set Background Red color");
    }
}

答案 1 :(得分:0)

试试这个

- (IBAction)buttonClicked:(UIButton *)sender
{
    if (!sender.selected)
    {
        initialColor = sender.backgroundColor; // create an instance variable UIColor * initialColor;
        [sender setSelected:YES];
        [sender setBackgroundColor:[UIColor clearColor]];
        [sender setBackgroundImage:[UIImage imageNamed:@"done.png"] forState:UIControlStateSelected];
    }
    else
    {
        [sender setSelected:NO];
        [sender setBackgroundColor:[UIColor initialColor]];
        [sender setBackgroundImage:nil forState:UIControlStateNormal];


    }
}

如果你有多个按钮,为每个按钮设置标签,并使用UIColor * buttonColour存储每个按钮背景的颜色,创建一个字典来存储颜色信息,将每个颜色设置为一个对象,按钮标签作为键它,在IBAction中使用发送者标签(UIButton)从字典中获取颜色....