无法以编程方式设置UIButton操作

时间:2013-05-09 15:03:13

标签: iphone ios objective-c

我在UIButtons上的操作遇到了一些麻烦。我正在以编程方式创建4个按钮,但我无法触发TouchUpInside事件。

我已经阅读了SO但我仍然遇到问题所以任何指针都会非常感激!

这是我创建和设置按钮及其动作的代码:

UIButton *btn;

float newWidth = 10;

for (int i = 0; i < _btnImages.count; ++i) {
    btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    CGRect imageFrame = CGRectMake(/*X*/newWidth, /*Y*/height - 80, 65, 65);
    btn.frame = imageFrame;
    btn.tag = i;

    [btn setBackgroundImage:[UIImage imageNamed:[_btnImages objectAtIndex:i]] forState:UIControlStateNormal];
    [btn addTarget:self
            action:@selector(btnSelected:)
            forControlEvents:UIControlEventTouchUpInside];
    [btn setEnabled:true];

    [self addSubview:btn];
    newWidth = newWidth + 75;
}

这是btnSelected方法:

-(void)btnSelected:(UIButton *)button
{
    NSLog(@"Button %ld Clicked",(long int)[button tag]);
} 

2 个答案:

答案 0 :(得分:7)

您展示的代码没问题。 可能的问题是:

  1. 您正在将按钮添加到禁用了用户交互的视图中(或者其任何祖先已禁用用户交互)。

  2. 您的按钮被超级视图剪切。确保你的按钮位于超级视图的范围内(超视图位于其超视图范围内等)。

  3. 当你的观点上有手势识别器时,可能会发生其他问题 - 他们可能会延迟&amp;取消子视图中的触摸,包括按钮。确保某些手势识别器不处理触摸事件。

答案 1 :(得分:0)

当你从按钮的边界内部释放按钮时,UIControlEventTouchUpInside被触发......这可能是一个有点棘手的概念,但是如果你按下按钮,并从按钮的边界外面释放,此控件事件不会触发。

UIControlEventTouchUpInside A touch-up event in the control where the finger is inside the bounds of the control. Available in iOS 2.0 and later. Declared in UIControl.h.