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

时间:2016-05-14 06:18:15

标签: objective-c uibutton

我已经根据数组计数动态创建了按钮,如果我按下它将移动到下一页。我想改变按钮的背景颜色,如果按下它。我按下第一个按钮,它的背景颜色应该改变,并且书房如果我按下任何其他按钮,第一个按下的按钮应该进入按钮的默认颜色,并且新按下的按钮的背景颜色应该改变, 请帮我这样做,按钮点击方法,我试过这样,

 - (IBAction)btn1Tapped:(id)sender {

UIButton *btn = (UIButton *) sender;


selected = YES;

if (selected) {
    [btn setBackgroundColor:[UIColor redColor]];

} 

}

这是我的按钮创建代码,

int buttonheight = 30;
int horizontalPadding = 20;
int verticalPadding = 20;

int totalwidth = self.view.frame.size.width;

int x = 10;
int y = 150;

for (int i=0; i<array.count; i++)
{

    NSString* titre = [array objectAtIndex:i];


    CGSize contstrainedSize = CGSizeMake(200, 40);//The maximum width and height

    NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                          [UIFont systemFontOfSize:20.0], NSFontAttributeName,
                                          nil];
    CGRect frame = [titre boundingRectWithSize:contstrainedSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attributesDictionary context:nil];

    int xpos = x + CGRectGetWidth(frame);




    if (xpos > totalwidth) {

        y =y +buttonheight+ verticalPadding;
        x = 10;


    }

    UIButton *word= [UIButton buttonWithType:UIButtonTypeRoundedRect];

    self.word  = word;


    NSLog(@"%@", NSStringFromCGRect(frame));
    word = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    word.frame = CGRectMake(x, y, CGRectGetWidth(frame)+5, CGRectGetHeight(frame));
    [word setTitle:titre forState:UIControlStateNormal];
    [word setTitle:titre  forState:UIControlStateSelected];

    word.backgroundColor = [UIColor colorWithRed:30.0/255.0 green:134.0/255.0 blue:255.0/255.0 alpha:1.0];

    [word setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];


    [word setTag:i];
    [word addTarget:self action:@selector(btn1Tapped:) forControlEvents:UIControlEventTouchUpInside];
    word.layer.borderColor = [UIColor blackColor].CGColor;
    word.layer.borderWidth = 1.0f;
    word.layer.cornerRadius = 5;

    [self.view addSubview:word];

    x =x+horizontalPadding+CGRectGetWidth(frame);



}

3 个答案:

答案 0 :(得分:1)

将按钮保持在一个数组中。

@property (nonatomic, copy, readonly) NSArray<UIButton *> *buttons;

然后在处理点击的方法中,执行类似的操作。

- (IBAction)buttonTapped:(UIButton *)sender {
    // Loop through all buttons, clearing the background color
    for (UIButton *button in self.buttons) {
        button.backgroundColor = [UIColor clearColor];
    }
    // Set the background color for the selected button
    sender.backgroundColor = [UIColor redColor];
}

你应该避免使用UIView的标签属性,它只会让你头疼。

答案 1 :(得分:1)

- (IBAction)allBtnSharedTappedevent:(id)sender {

     UIButton *btn = (UIButton *) sender;

     [btn setBackgroundColor:[UIColor redColor]];

    //loop through all your buttons

    for(UIView *view in [self.view subviews]){
        if([view isKindOfClass:[UIButton class]]){
            if(view != btn){
                UIButton* btn1 = (UIButton*) view;
                [btn1 setBackgroundColor:[UIColor grayColor]];
            }
        }
    }
}

答案 2 :(得分:-1)

给你的按钮标签号码如1,2,3,4 ......等 那么

- (IBAction)btn1Tapped:(id)sender {

UIButton *btn = (UIButton *) sender;

 [btn setBackgroundColor:[UIColor redColor]];
loop through all your buttons

for(int i = 1;i <= total numbers of button; i++){

if(btn.tag != i){

  UIButton* btn1 = [myView viewWithTag:i];
[btn1 setBackgroundColor:[UIColor graycolor]];
}

}

}