如何在ios中单击它来更改按钮的图像

时间:2015-09-21 15:04:03

标签: ios objective-c uibutton

忏悔:我已经找到了我能找到的所有可能的链接,但不幸的是,没有人能为我工作。

我正在动态创建按钮。选择按钮时,应更改所选按钮的颜色,其余按钮应保持默认颜色。这样,用户可以识别选择了哪个按钮。

假设有3个按钮:全部为蓝色,当我选择第一个时,它应该变为白色,其他两个应保持蓝色。当我选择第二个时,第一个应该返回蓝色,第二个应该是白色。

btnCounts 我从服务器获取的数据会有所不同。

  -(void)createButtons{
    for (int i=0; i<btnCounts; i++) {
       UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
       [btn setTag:i];
       [btn setFrame:CGRectMake(xVal, 0, width/btnCounts, 40)];
      // [btn setImage:[UIImage imageNamed:@"btn_image.png"] forState:UIControlStateNormal];
       [btn setBackgroundImage:[UIImage imageNamed:@"blue.png"] forState:UIControlStateNormal];
       [btn setBackgroundImage:[UIImage imageNamed:@"white.png"] forState:UIControlStateSelected];
       [btn setTitle:name forState:UIControlStateNormal];
       [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
       [btn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
       [scrV addSubview:btn];
       xVal += self.view.frame.size.width/btnCounts+1;
     }
 }

现在,在 btnClicked:方法中,我将按钮作为参数传递,以便我可以使用所选按钮。

 -(void)btnClicked:(UIButton *)button
 {
     int tag = (int)button.tag;
     //...
 }

请帮我找到我在这里缺少的东西。

感谢。

2 个答案:

答案 0 :(得分:1)

创建一个实例UIButton变量来容纳所选按钮,以便在点击下一个按钮时取消选择该按钮。如果您只将当前点按的按钮传递到btnClicked:方法,则您无法知道取消选择哪个按钮(如果有)。

@implementation ClassName {
    UIButton *previousButton;
}

...

- (void)btnClicked:(UIButton *)button
{
    if(previousButton)
        [previousButton setBackgroundColor:[UIColor blueColor]];

    previousButton = button;

    [button setBackgroundColor:[UIColor whiteColor]];

    // do whatever else you need to do here
}

答案 1 :(得分:0)

为此,您需要将所选按钮存储在临时对象中。

在界面(.h)文件中创建按钮:

UIButton *selectedButton;

在for for循环之前,在-(void)createButtons方法中添加以下行。

selectedButton = nil;

for() {...}

此处selectedButton设置为nil,因为最初没有选择任何按钮。

最后用以下方法替换您的-(void)btnClicked:(UIButton *)button方法。

-(void)btnClicked:(UIButton *)button {
    if(selectedButton) {
        selectedButton.selected = NO;
    }

    button.selected = YES;
    selectedButton = button;
}

如果您想最初选择任何按钮,而不是像btnClicked方法那样将该按钮指定给selectedButton