【发布时间】:2011-07-27 08:47:45
【问题描述】:
我正在动态创建一些 UIbutton。用户点击任何一个按钮都会显示一些东西(例如:不同的视图)。所以我成功地制作了按钮,得到了标签。但是在下面的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
}
}
【问题讨论】:
-
您希望在单击按钮时显示什么?
-
可以使用switch语句代替if..else.if..条件
-
在某些时候,您必须将您的实现映射到您创建的按钮。从代码中我可以看到您根据数组确定按钮的数量,这样您就知道有多少按钮。为什么没有一个字典,其中键是按钮标签,值是选择器或其他一些数据结构,可以指示您想要实现的目标。这样,当您获取按钮的标签时,只需从字典中获取键的值并使用它。这也意味着您不需要大量可怕的 if 语句或巨大的 switch 语句
-
如果单击一个按钮,它将显示一个视图,如果单击另一个按钮,它将显示一个不同的视图
-
对不起,凯文 :) 对此我深表歉意。