我动态地在for循环中创建了五个按钮。现在我想将OnClick事件与执行不同操作的每个按钮相关联。我该怎么做以及如何检测单击哪个按钮?
for (NSUInteger i=0;i<5;i++)
{
UIButton *myButton1 = [[UIButton buttonWithType:UIButtonTypeCustom]
initWithFrame:CGRectMake(5, 57,15, 15)];
[myButton1 setTitle:@"Click Me!" forState:UIControlStateNormal];
[myButton1 addTarget:self action:@selector(buttonClicked1:)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:myButton1];
}
答案 0 :(得分:2)
您可以将选择器名称合并为一个字符串,并将该字符串转换为选择器:
for (int i=0; i<5; i++)
{
NSString *actionName = [NSString stringWithFormat:@"buttonClicked%i", i];
SEL action = NSSelectorFromString(actionName);
// …
}
但是由于按钮可能会做类似的事情,如果它们都调用相同的方法会更好,你可以通过tag
简单地告诉按钮:
for (int i=0; i<5; i++)
{
// …
[button setTag:i];
[button addTarget:self action:@selector(buttonClicked:)
forControlEvents:UIControlEventTouchUpInside];
}
- (void) buttonClicked: (id) button
{
const int tag = [button tag];
switch (tag) { /* … */ }
}
顺便说一下,为什么这么多人只要输入NSInteger
就坚持写int
?有区别吗?不,我知道。
答案 1 :(得分:0)
为什么要在for循环中创建5个按钮? 你没有使用Interface Builder有什么特别的原因吗?
此外,您发布的代码会将每个按钮放在同一位置。按钮将位于上一个按钮的顶部,依此类推。