0

ボタンがタッチされたときに UIButton の画像を変更しようとしています。現在、私はそれを変更しますが、強調表示された状態の変更のみです。変化してそこにとどまりたいと思います。状態の変更のために UIControlStateSelected を試しましたが、うまくいきませんでした。

助けてくれてありがとう

ここに私のコードがあります:

 // Create buttons for the sliding category menu.
    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];

    NSArray * myImagesSel = [NSArray arrayWithObjects:@"category-cafe-sel.png", @"category-food-sel.png", @"category-clothing-sel.png", @"category-health-sel.png", @"category-tech-sel_phone.png" , @"category-tech2-sel.png", @"catefory-theatre-sel.png", @"category-travel-sel.png", nil];

    // only create the amount of buttons based on the image array count
    for(int i = 0;i < [myImages count]; i++)
    {
        // Custom 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 setImage:[UIImage imageNamed:[myImagesSel objectAtIndex:i]] forState:UIControlStateHighlighted];

        NSLog(@"The button title is %@ ", btn.titleLabel.text);

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

2 に答える 2

2

IBAction メソッドに次の行を追加します。

 - (IBAction)change:(id)sender
 {
   UIButton *button = (UIButton *)sender;
   int tagOfButton = button.tag - 1;
   [button setImage:[UIImage imageNamed:[myImagesSel objectAtIndex:tagOfButton]] forState:UIControlStateNormal];
 }

次のように for ループに 1 行追加します。

for(int i = 0;i < [myImages count]; i++)
{
    // other stuffs
    btn.tag  = i+1;
}

編集:

他のボタンがクリックされたときに前の選択を元に戻す必要がある場合:

このループを IBAction メソッド内に記述します。

for(int i = 0;i < [myImages count]; i++)
{
  UIButton *but = (UIButton *)[buttonArray objectAtIndex:i];
  if(but != button)
  {
       [btn setImage:[UIImage imageNamed:[myImages objectAtIndex:i]] forState:UIControlStateNormal];
  }
}

または、単純に前のボタン タグを変数に保存します。そして、それを使用して、イメージの変更を元に戻します。

于 2013-01-08T11:06:06.673 に答える
0
[btn setTitle:@"I'm not selected" forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:[myImages objectAtIndex:i]] forState:UIControlStateNormal];
[btn setTitle:@"I'm selected" forState:UIControlStateSelected];
[btn setImage:[UIImage imageNamed:[myImagesSel objectAtIndex:i]] forState:UIControlStateSelected];

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

-(IBAction)buttonPressed:(id)sender {
  btn.selected = !btn.selected;
}
于 2013-01-08T11:40:49.357 に答える