如何为阵列中的每个人创建一个具有唯一图像和选择器的自定义UIButton?

时间:2012-12-05 15:50:34

标签: ios iphone objective-c uibutton programmatically-created

我有几个从NSMutableArray创建的UIButton。我正在尝试使用独特的图像自定义每个UIButton。

在下一行中,我不确定用于分别从图像数组为每个按钮设置图像的语法:

[btn setImage:[UIImage imageNamed:[myImages objectAtIndex:3]] forState:UIControlStateNormal];

这是我的其余代码:

NSMutableArray* buttonArray = [[NSMutableArray alloc] init];

for(int i = 0; i < 8; i++)
{
    // Custom UIButton
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

    [btn setFrame:CGRectMake(0.0f, 2.0f, 52.0f, 52.0f)];
    [btn setTitle:[NSString stringWithFormat:@"Button %d", i+1] forState:UIControlStateNormal];

    NSArray * myImages = [NSArray arrayWithObjects:@"category0.png", @"category-clothing1.png" , @"category2.png", @"category3.png", nil];

    [btn setImage:[UIImage imageNamed:[myImages objectAtIndex:3]] forState:UIControlStateNormal];

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

}

我还希望为每个按钮调用一个不同的选择器。

2 个答案:

答案 0 :(得分:2)

这样的东西?我刚刚看到你的帖子有关每个按钮需要不同的操作,但我会检查按钮的发件人并相应地调整你的(buttonPressed :)方法中的代码。您还应该确保按钮阵列具有适当数量的图像,因此更好的方法可能是仅根据图像阵列计数创建按钮数量。 (回答编辑以反映这一点)。我还想补充一点,你应该养成在改变正常状态时也改变图像突出显示状态的习惯,所以当你按下图像时它不会变成空白。

NSMutableArray* buttonArray = [NSMutableArray array];
NSArray * myImages = [NSArray arrayWithObjects:@"category0.png", @"category-clothing1.png" , @"category2.png", @"category3.png", nil];

for(int i = 0;i < [myImages count]; i++)
{
    // Custom UIButton
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

    [btn setFrame:CGRectMake(0.0f, 2.0f, 52.0f, 52.0f)];
    [btn setTitle:[NSString stringWithFormat:@"Button %d", i] forState:UIControlStateNormal];
    [btn setImage:[UIImage imageNamed:[myImages objectAtIndex:i]] forState:UIControlStateHighlighted];
    [btn setImage:[UIImage imageNamed:[myImages objectAtIndex:i]] forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [buttonArray addObject:btn];
}

答案 1 :(得分:2)

此代码包含数组中的图像和选择器。 (此代码未经过编译检查,可能包含一些小问题,不便之处)

NSMutableArray* buttonArray = [NSMutableArray array];
NSArray * myImages = [NSArray arrayWithObjects:@"category0.png", @"category-clothing1.png" , @"category2.png", @"category3.png", nil];


// You need to assign string name and that should be your method name.
NSMutableArray *selectors=[[NSMutableArray alloc]initWithArray:@"sel1",@"sel2",@"sel3",@"sel4", nil];


for(int i=0; i<[myImages count]; i++){
    // Custom UIButton
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    [btn setFrame:CGRectMake(0.0f, 2.0f, 52.0f, 52.0f)];
    [btn setTitle:[NSString stringWithFormat:@"Button %d", i] forState:UIControlStateNormal];
    [btn setImage:[UIImage imageNamed:[myImages objectAtIndex:i]] forState:UIControlStateHighlighted];
    [btn setImage:[UIImage imageNamed:[myImages objectAtIndex:i]] forState:UIControlStateNormal];

    SEL selector = selectorFromString([selectors objectAtIndex:i]);
    [btn addTarget:self action:@selector(selector) forControlEvents:UIControlEventTouchUpInside];

    [buttonArray addObject:btn];
}