iOS UIButtons没有响应

时间:2013-02-26 18:12:36

标签: ios objective-c uibutton nsarray

我遇到了一个问题,即我将图像添加到视图中,该视图具有父级(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)由于某种原因没有被调用。

2 个答案:

答案 0 :(得分:0)

对于你正在设置相同框架buttonFrame的所有按钮。所以按钮一个在另一个上面添加,最新的按钮在顶部添加。因此该按钮的操作仅响应

解决方案

  • 记录按钮框。
  

的NSLog(@ “%@”,NSStringFromCGRect(buttonFrame));

  • 放置背景图像以使按钮可见
  • 使用itration值给出一个单独的框架,使按钮单独可见
  • 检查_buttonsView的框架并检查它是否在视图中可见,并确保按钮框架是_buttonsView中的可见框架

使用此按钮初始化按钮

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

最后但并非最不重要的是,该行动可以被2个原因阻止

  1. 该按钮不在superview的可见框架中
  2. 其他一些视图位于按钮顶部

答案 1 :(得分:0)

我不确定但也许是因为你的initWithFrame引用了一个不断更新的CGRect变量。而不是使用变量,直接在initWithFrame

中使用CGRectMake

e.g。

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