我有这个方案工作正常(-->
=“有子视图”):
ViewController.view --> imageView --> containerView --> UIButton
正如预期的那样,按钮会触发指定的选择器 但是,如果我执行以下操作(最好有几个原因)按钮会停止接收触摸。
ViewController.view --> imageView
ViewController.view --> containerView --> UIButton
[self.view bringSubviewToFront:_containerView];
任何线索?
- 更新
响应请求,这里有一些按钮创建代码:
// in viewDidLoad
_controlsView = [[[NSBundle mainBundle] loadNibNamed:@"Controls"
owner:self options:nil] objectAtIndex:0];
_controlsView.frame = CGRectMake(0, 50,
_controlsView.bounds.size.width, _controlsView.bounds.size.height);
[self.view addSubview:_controlsView];
// ...
[_controlsView.superview bringSubviewToFront:_controlsView];
// in viewDidAppear
if (!_demoButton) {
_demoButton = (UIButton*)[_controlsView viewWithTag:kDemoButtonTag];
[_demoButton addTarget:self action:@selector(buttonPressed:)
forControlEvents:UIControlEventTouchUpInside];
// configuration, color, font, layer, etc. all works well
}
最后,Controls.xib
看起来像这样:
答案 0 :(得分:1)
Probably
您的观点是通过此
[self.view bringSubviewToFront:<UIButton_INSTANCE>];
答案 1 :(得分:0)
有时会发生这种情况,当我在容器视图的框架外设置一个控制元素时,我发生了这种情况。我没有测试过这个,但是由于你有很多嵌套视图,它可能会出现在第一个实例上,因为imageview可能足够大以包含UIButton。
答案 2 :(得分:0)
由于代码不足,无法准确找出发生这种情况的原因。
我想您应该尝试编写一个UIButton类别来覆盖-touchesBegan:withEvent:
-touchesMoved:withEvent:
-touchesEnded:withEvent:
一些调试信息输出,如:
{
[super touchesBegan:touches withEvent:event];
NSLog(@"Touches began/moved/ended!");
}
当您按下UIButton实例并且调试信息被打印时,这意味着您的UIButton实例已收到触摸事件但未以正确方式处理它。相反,这意味着响应链中有一个实例阻止事件传递。
特别是,如果发现仅触摸开始调试信息被打印并且触摸移动的调试信息在手指移动后不再打印,则您的触摸事件可能被手势识别器阻挡。