2

ビューにプログラムで 3 つのボタンを追加し、後でアクセスできるようにボタンを配列に追加しました。

for (i = 0; i < 3; i++)
{
  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
  [view addSubview:button];
  [_buttons addObject:button];
}

配列内のボタンを参照してボタンの画像を変更しても、画面上のボタンは変更されません。

UIButton* button = [_buttons objectAtIndex: 0];
[button setImage:thumb forState:UIControlStateNormal];

ビュー内のすべてのサブビューをループしてボタンの画像を変更する方法を見つけましたが、もっと良い方法はありますか?

for (UIView* subView in ((UIView*)[self.view.subviews objectAtIndex:0]).subviews){
    if ([subView isKindOfClass:[UIButton class]]){
        UIButton *button = (UIButton*)subView;
        if (button.tag == self.selected){
            [button setImage:thumb forState:UIControlStateNormal];
        }
    }
}
4

5 に答える 5

4

これの一般的な理由は、配列が初期化されていないことです。これが発生した場合、Objective C は文句を言ったり、例外をスローしたりしません。代わりに、要素を追加する呼び出しが発生しなかったかのように動作します。また、アイテムを取り戻そうとすると nil が返されます。

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

_buttons = [NSMutableArray array];

これで問題は解決するはずです。

于 2012-12-31T04:55:59.457 に答える
0

これはクリックイベントで役立つ可能性があります:

      -(void)clickEvent:(id)sender
      {
           [sender setImage:thumb forState:UIControlStateNormal];
      }

これがあなたがイベントを拾っている方法である場合。

于 2012-12-31T04:49:51.473 に答える
0

addSubview を実行すると、view は追加しているサブビューを保持します。また、addObject はそれを保持します。したがって、両方とも異なるオブジェクトです。配列内のオブジェクトのプロパティを変更しても、ビューによって保持されるオブジェクトには影響しません。タグを使うことでループを回避できます。ビューにボタンを追加しながら、それらに一意のタグを設定します。また、アクセスしたい場合はタグで直接取得してください。

//set tags for buttons
      UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
      [button setTag:999];
      [view addSubview:button];

//access using tag
      UIButton *button = (UIButton*)[view viewWithTag:999];
      [button setImage:thumb forState:UIControlStateNormal];
于 2012-12-31T04:55:18.253 に答える
0

ボタンを作成したら、タグを追加します。そして後でそのタグを使用してそのボタンを取得します。

for (i = 0; i < 3; i++)
{
  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
  button.tag = i+1;
  [view addSubview:button];
  [_buttons addObject:button];
}

次に、次のようにアクセスできます。

UIButton *button1 = (UIButton *)[self.view viewWithTag:1];
UIButton *button2 = (UIButton *)[self.view viewWithTag:2];
UIButton *button3 = (UIButton *)[self.view viewWithTag:3];
于 2012-12-31T04:57:00.637 に答える
0

後でUIControl programatically使用するように追加すると、次のようになります。referenceadd tagdifferent

 yourBtn.tag = 111;

次のように UIButton を取得referenceします。

 UIButton *button = (UIButton*)[yourViewWhereYouAdded viewWithTag:111];
于 2012-12-31T04:58:19.107 に答える