0

我在下面的代码中有一个 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];
        }

谢谢你的帮助

:)

4

3 回答 3

4

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

btn.tag = i;

这里tag number将用于differentiatingwhich buttonwas called

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

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

    } else {

    }
}
于 2013-01-08T11:11:22.657 回答
2

使用以下代码:

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

       //Your code

       break;
       }
     }
}

它工作正常。当您获得标签值时,您可以根据标签值执行操作。

谢谢,

鹤芒。

于 2013-01-08T11:37:32.167 回答
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

等等。

但是,也可以考虑仅使用一种操作方法并使用标签来分隔操作方法中的按钮。

于 2013-01-08T11:13:29.797 回答