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. 该按钮不在superview的可见框架中
  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 回答