为什么我的"Upputton内部"活动没有被调用?

Arc*_*ekt 38 objective-c uibutton ios

我已经制作了很多按钮,我无法弄清楚为什么这个按钮不起作用.

我的层次结构设置如下:

View -> Scroll View -> Subview -> Button
Run Code Online (Sandbox Code Playgroud)

此子视图中还有很多其他项目,每个项目在触摸时都有效.在界面构建器中,我可以看到" Touch Up Inside "事件绑定到我的方法

__CODE__.

但是,当我单击该按钮时,该方法永远不会执行,我的断点随后永远不会被击中.

我注意到,即使我按下按钮上的按钮,标签也不会改变颜色(即使显示高亮显示触摸),但视图上的另一个按钮确实如此.

在按钮上启用了用户交互以及层次结构中的所有内容.

为了让我在子视图中的项目接收触摸事件,我使我的滚动视图看起来像这篇文章中的第4个答案.

Arc*_*ekt 59

啊哈,我明白了.事实证明,包含按钮的子视图(以及其他控件)的高度为740,按钮的Y值为781.向上移动按钮可以解决问题.由于一切都正确显示,我没想到检查子视图的高度.

  • 如果子视图位于superview之外,则控制事件不会触发.为方便起见,将superview的clipSubviews属性设置为YES,以便您可以直观地识别子视图框架. (26认同)

Sha*_*ang 17

请确保您的按键被安置的SuperView的范围内,
如果一个按钮被放置的SuperView的边界之外,按钮将无法点击,
因为的实现hitTest功能


Ash*_*osh 15

我认为您已将按钮放在UIImageView上,如果是这样,您必须为该UIImageView启用UserInteraction.请检查.


Xei*_*han 13

如果a UITapGestureRecognizer在您的按钮的任何超级视图上实现.然后UIButtonEventTouchUpInside不会被解雇

你应该像这样实现UITapGestureRecognizer

tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)];
[tapGesture setCancelsTouchesInView:NO]; // This should do what you want
[tapGesture setDelegate:self];
Run Code Online (Sandbox Code Playgroud)


Tho*_*wes 5

另一件要考虑的事情是你是否在它上面放置了另一个视图?

例如,如果您从笔尖加载另一个视图并错误地将其框起来,那么它很可能会出现在按钮的顶部,从而拦截任何按下。

您可以使用“Debug View Heirachy”控件检查这是 XCode 6。


Nia*_*ang 5

布局看起来像:

查看->子视图(UIView)->按钮

通过在Subview(UIView)的属性中选中“已启用用户交互”复选框,可以修复此问题。