我正在动态创建按钮。选择按钮时,应更改所选按钮的颜色,其余按钮应保持默认颜色。这样,用户可以识别选择了哪个按钮。
假设有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;
//...
}
请帮我找到我在这里缺少的东西。
感谢。
答案 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
。