如何在按下时更改按钮的颜色,并在按下其他按钮时重置为原始颜色?

时间:2014-07-09 02:33:03

标签: ios uibutton

所以我有两个灰色UIButton,button1和button2。当我按下按钮时,我想改变按钮的颜色,当我按下另一个按钮时,我想改回按钮的颜色。

我使用了这段代码:

UIButton *btn = (UIButton *)sender;
[btn setBackgroundColor:[UIColor redColor]];

但它会使两个按钮变红。

如何制作,以便如果button1为红色,当我按下按钮2时它会变回灰色?

4 个答案:

答案 0 :(得分:0)

您将要制作两个单独的按钮。通过代码的外观,您只声明了一个按钮。

在界面中声明两个按钮,在ViewDidLoad()方法中初始化它们。

为每个按钮设置2个不同的目标,这样当单击一个按钮时,您可以设置其他按钮的颜色。

答案 1 :(得分:0)

我从中得到的是两个按钮都连接到相同的动作/方法,其中包含您提供的代码。执行指定操作的最简单方法是使用两个不同的操作/方法,并将每个按钮连接到不同的方法。将button1连接到button1按下并将button2连接到button2按下。

在.h put:

{
    //connect these buttons up either via interface builder or through code
    IBOutlet UIButton* button1;
    IBOutlet UIButton* button2;
}

- (IBAction)button1Pressed:(id)sender;
- (IBAction)button2Pressed:(id)sender;

在.m put:

//connect this method to "touch up inside" on button1
- (IBAction)button1Pressed:(id)sender
{
    //makes button1 red
    [button1 setBackgroundColor:[UIColor redColor]];
}

//connect this method to "touch up inside" on button2
- (IBAction)button2Pressed:(id)sender
{
    //changes button1 back to gray
    [button1 setBackgroundColor:[UIColor grayColor]];
}

希望这有帮助!

答案 2 :(得分:0)

有很多方法可以解决这个问题,在你的情况下,我们真的不知道你是如何实例化UIButton的。以下是使用标记的可能解决方案之一:

首先,您应该在标题中定义按钮:

@implementation _4644518ViewController {
    UIButton *btn1;
    UIButton *btn2;
}

然后,你应该在你的视图中实现它们并将它们附加到tapped方法:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    btn1 = [[UIButton alloc] initWithFrame:CGRectMake(5, 5, 100, 30)];
    [btn1 setTag:101];
    [btn1 setTitle:@"btn1" forState:UIControlStateNormal];
    btn1.backgroundColor = [UIColor lightGrayColor];
    [btn1 addTarget:self action:@selector(btnTapped:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:btn1];

    btn2 = [[UIButton alloc] initWithFrame:CGRectMake(5, 40, 100, 30)];
    [btn2 setTag:102];
    [btn2 setTitle:@"btn2" forState:UIControlStateNormal];
    btn2.backgroundColor = [UIColor lightGrayColor];
    [btn2 addTarget:self action:@selector(btnTapped:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:btn2];
}

最后要做的是实施btnTapped方法:

- (void)btnTapped:(id)sender
{
    if ([sender tag] == 101) {
        btn1.backgroundColor = [UIColor redColor];
        btn2.backgroundColor = [UIColor lightGrayColor];
    } else if([sender tag] == 102) {
        btn1.backgroundColor = [UIColor lightGrayColor];
        btn2.backgroundColor = [UIColor redColor];
    }
}

正如我之前提到的,有很多方法可以执行这样的算法,但我喜欢这个,因为我们不了解你的后台应用程序很多东西,而且这个很容易为你定制。

答案 3 :(得分:0)

创建两个按钮btn1& btn2。

@property (weak, nonatomic) IBOutlet UIButton *btn1;
@property (weak, nonatomic) IBOutlet UIButton *btn2;
- (IBAction)btnClick:(id)sender;

btn1& btn2应该连接到btnClick。下面的代码将完成您的其余工作

- (IBAction)btnClick:(id)sender {

    if (self.btn1 == sender) {

        [self.btn1 setBackgroundColor:[UIColor redColor]];
        [self.btn2 setBackgroundColor:[UIColor grayColor]];

    }else{

        [self.btn1 setBackgroundColor:[UIColor grayColor]];
        [self.btn2 setBackgroundColor:[UIColor redColor]];

    }

}