iPhone中的多按钮onclick事件出现问题

时间:2009-10-23 05:44:13

标签: iphone

我动态地在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];
}

2 个答案:

答案 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有什么特别的原因吗?

此外,您发布的代码会将每个按钮放在同一位置。按钮将位于上一个按钮的顶部,依此类推。