如何为数组中的每个UIButton创建一个方法

时间:2013-01-08 11:07:17

标签: iphone objective-c ios uibutton

我在以下代码中有一组UIButtons。我遇到的问题是我需要一个与每个按钮相关的独特方法。此时任何按下的按钮都使用action:@selector(buttonPressed:)

我坚持如何将方法连接到每个按钮。

 // Create buttons
        NSMutableArray* buttonArray = [NSMutableArray array];
        NSArray * myImages = [NSArray arrayWithObjects:@"category-cafe-unsel.png", @"category-food-unsel.png", @"category-clothing-unsel.png", @"category-health-unsel.png", @"category-tech-unsel_phone.png" , @"category-tech2-unsel.png", @"catefory-theatre-unsel.png", @"category-travel-unsel.png", nil];

        // only create the amount of buttons based on the image array count
        for(int i = 0;i < [myImages count]; i++)
        {
            // Custom UIButton
            UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

            [btn setFrame:CGRectMake(0.0f, 20.0f, 52.0f, 52.0f)];
            [btn setTitle:[NSString stringWithFormat:@"Button %d", i] forState:UIControlStateNormal];
            [btn setImage:[UIImage imageNamed:[myImages objectAtIndex:i]] forState:UIControlStateNormal];

            [btn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
            [buttonArray addObject:btn];
        }

感谢您的帮助

:)

3 个答案:

答案 0 :(得分:4)

最佳选择是对所有same method使用buttons。为此,您应使用tags。所以每个按钮都有自己的标签。

btn.tag = i;

此处tag number将用于differentiating button called的{​​{1}}。

然后在方法中你可以获得标签,这也可以通过switch-statement完成:

-(void)buttonPressed:(UIButton*)sender
{
    if( sender.tag == 1 ){

    } else {

    }
}

答案 1 :(得分:2)

使用以下代码:

-(void)buttonPressed:(UIButton*)sender
{
    UIButton *btn = sender;
    for(int i = 0;i < [myImages count]; i++)
    {
       if (i == [btn tag]) {

       //Your code

       break;
       }
     }
}

它完全正常工作。当您获得Tag值时,您可以按标签值执行操作。

谢谢,

Hemang。

答案 2 :(得分:1)

[btn addTarget:self action:@selector(NSSelectorFromString([NSString stringWithFormat:@"button%d", i])) forControlEvents:UIControlEventTouchUpInside];

相应的行动将是:

-(void)button1:(UIButton*)sender
-(void)button2:(UIButton*)sender
-(void)button3:(UIButton*)sender
-(void)button4:(UIButton*)sender

等等。

但是,或者考虑仅使用一种操作方法并使用标记来分隔操作方法中的按钮。