1

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];

}

また、ボタンごとに異なるセレクターを呼び出したいと思います。

4

2 に答える 2

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];
}
于 2012-12-05T15:56:54.913 に答える
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];
}
于 2012-12-05T16:06:56.867 に答える