0

親(scrollView)を持つビューに画像を追加するという問題が発生しています。問題は、すべてのボタンにセレクターを設定しているにもかかわらず、ビューで最後に生成されたボタンのみがセレクターに応答し、メソッドを呼び出すことです。

for (int i = 0; i < [_wordsArray count]; i++) {

    buttonFrame = CGRectMake(WORDSLEFTBOUNDARY, heightPlacement, [_detailSlider value], [_detailSlider value]);
    UIButton *button = [[UIButton alloc] initWithFrame: buttonFrame];

    // set the image for the button
    [button setImage:[UIImage imageNamed:@"wordicon.png"] forState:UIControlStateNormal];
    [button setTag:i]; // set tag identifier for the button

    // add selector method 'buttonClickedAction' so that the method is called when a user
    // clicks one of the buttons.
    [button addTarget:self
               action:@selector(buttonClickedAction:)
     forControlEvents:UIControlEventTouchUpInside];

    [_buttonsView addSubview: button]; // add newly created button as a subview to the buttonView

    [_wordButtonArray addObject:button]; // insert newly created button into the wordButtonArray

    if (i < [_dateDifferences count]) {
        heightPlacement -= 60 + (60 * [[_dateDifferences objectAtIndex:i] intValue]);
    }
}

したがって、上記のコードでは、各ボタンを作成し、ボタンの配列に追加する前にセレクターを追加します。ただし、何らかの理由でレスポンダー メソッド (buttonClickedAction) が呼び出されていません。

4

2 に答える 2

0

すべてのボタンについて、同じフレームを設定しています。buttonFrameしたがって、ボタンは上下に追加され、最新のものは一番上に追加されます。したがって、そのボタンのアクションは応答するだけです

解決

  • ボタン フレームをログに記録します。

NSLog(@"%@",NSStringFromCGRect(buttonFrame));

  • ボタンが見えるように背景画像を配置する
  • ボタンを個別に表示するために、繰り返し値を使用して別のフレームを指定します
  • _buttonsView のフレームを確認し、それがビューに表示されていることを確認し、buttonsframe が _buttonsView で表示されるフレームであることを確認します

これを使用してボタンを初期化します

 UIButton *button=[UIButton buttonWithType:UIButtonTypeCustom];
    [button setFrame:buttonFrame];

最後になりましたが、アクションは 2 つの理由でブロックされる可能性があります

  1. ボタンがスーパービューの表示フレームにありません
  2. 他のビューがボタンの上部にあります
于 2013-02-26T18:15:23.540 に答える
0

よくわかりませんが、initWithFrame が常に更新される CGRect 変数を参照している可能性があります。変数を使用する代わりに、initWithFrame 内で直接 CGRectMake を使用します。

例えば

UIButton *button = [[UIButton alloc] initWithFrame: CGRectMake(WORDSLEFTBOUNDARY, heightPlacement, [_detailSlider value], [_detailSlider value])];
于 2013-02-26T18:28:26.527 に答える