我正在动态创建一些UI按钮。并且用户单击任何一个按钮将显示某些内容(例如:不同视图)。所以我成功制作了按钮,获得标签。但是在下面的IBAction方法中,因为所有这些按钮都是动态创建的。所以我不能使用if,else if语句来显示基于标签号的视图。我在考虑使用循环?任何想法?
这是我的代码:
NSMutableArray *buttonsArray = [[NSMutableArray alloc] initWithObjects:nil];
for(int i = 0; i < [someArray count]; i++)
{
button = [[UIButton alloc] initWithFrame:CGRectMake(btnX,btnY,btnW,btnH)];
button.tag = i;
[buttonsArray addObject:button];
[[buttonsArray objectAtIndex:i] addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
button.titleLabel.text = [NSString stringWithFormat:@"Click it"];
[self.view addSubview:button];
btnY = btnY + 120;
}
`-(IBAction) buttonPressed:(id)sender `
{
UIButton *btn = (UIButton *)sender;
NSLog(@"%ld", btn.tag);
//Don't know the number of buttons, so this is not gonna work
if( btn.tag == 1)
{
//do something
}
if( btn.tag == 2)
{
//do something
}
if( btn.tag == 3)
{
//do something
}
if( btn.tag == 4)
{
//do something
}
}
答案 0 :(得分:0)
你得到多个UI按钮? b'coz你的X和Y对所有人都是一样的..
答案 1 :(得分:0)
除了两件事,你的代码都可以。
(1)更改按钮的坐标,以便为视图中的所有按钮获得不同的位置。
(2)更改以下代码:
[[buttonsArray objectAtIndex:i] addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
使用此代码:
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
如果需要进一步的帮助,请告诉我。
答案 2 :(得分:0)
循环不是完美的解决方案,我认为......同意Jennis ...使用switch而不是if else语句...如果你想使用循环试试:
-(IBAction) buttonPressed:(id)sender{
UIButton *selectedbtn = (UIButton *)sender;
for (UIButton *bttn in buttonsArray) {
if ([bttn.tag == selectedbtn.tag ) {
//do something
}
}
}