我在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]);
}
答案 0 :(得分:7)
您展示的代码没问题。 可能的问题是:
您正在将按钮添加到禁用了用户交互的视图中(或者其任何祖先已禁用用户交互)。
您的按钮被超级视图剪切。确保你的按钮位于超级视图的范围内(超视图位于其超视图范围内等)。
当你的观点上有手势识别器时,可能会发生其他问题 - 他们可能会延迟&amp;取消子视图中的触摸,包括按钮。确保某些手势识别器不处理触摸事件。
答案 1 :(得分:0)
当你从按钮的边界内部释放按钮时,UIControlEventTouchUpInside
被触发......这可能是一个有点棘手的概念,但是如果你按下按钮,并从按钮的边界外面释放,此控件事件不会触发。