繁体   English   中英

为什么我的 UIButton 的“内部修饰”事件没有被调用?

[英]Why is my "touch up inside" event for my UIButton not being called?

我做了很多按钮,但我不知道为什么这个不起作用。

我的层次结构是这样设置的:

View -> Scroll View -> Subview -> Button

此子视图中还有很多其他项目,每一个项目在被触摸时都会起作用。 在界面生成器中,我可以看到“ Touch Up Inside ”事件绑定到我的方法

- (IBAction)favoritesButtonDepressed:(id)sender 

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

我注意到,即使我按住按钮,标签也不会改变颜色(即使启用了高亮显示触摸),但视图上的另一个按钮会改变颜色。

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

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

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

确保您的按钮位于 superView 的 bounds 内
如果按钮放置在 superView 的边界之外,则该按钮将不可点击,
因为hitTest函数的实现

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

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

你应该像这样实现 UITapGestureRecognizer

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

要考虑的另一件事是您是否在其上放置了另一个视图?

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

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

布局看起来像:

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

通过勾选子视图(UIView)属性中的“启用用户交互”复选框来修复它。

如果您有一个父 UIView,您可以尝试将其 userInteractionEnabled 属性设置为 True,在某些情况下它可以解决问题。

ParentView -> ChildView -> StackView -> UIButton

在这种情况下,我将 ChildView 的 userInteraction 设置为 true 并解决了问题。

我最近有类似的事情;

尝试删除 Controller 中的(IBAction)favoritesButtonDepressed:(id)sender声明(和方法),然后再次从 Interface Builder 中“拖动”它。

在我的情况下,按钮的 IBAction 不起作用我尝试了很多方法。 所以我为按钮制作了一个 IBOutlet,并通过使用“addTarget”方法添加了点击操作,它就像一个魅力。

[myButton addTarget:self action:@selector(dismissClickFunction:) forControlEvents:UIControlEventAllEvents];

故障排除:

  • 确保按钮前面没有隐藏视图。
  • 确保用户交互设置为 true。

确保button.isEnabled没有设置为false

我有类似的问题。

打开Debug View Hierarchy并确保没有父视图的heightwidth zero

在我的情况下, UIButton位于垂直UIStackView中的容器( UIView )中。 我向容器添加了高度约束,触摸事件开始工作。

我有同样的问题。

我在 xib 中有一个按钮,我放置在视图中。

我将 xib 的实例保留为导入时设置的默认小尺寸,因为我在代码中自动调整它的大小以处理设备旋转。

这导致按钮即使明显位于屏幕中间也不会对触摸做出反应。

我通过简单地更改 xib 实例的布局来填充父视图来修复它。

检查是否缺少任何约束。 所有的约束都应该平衡,没有红线。 这为我解决了这个问题。

我的 ViewController 是另一个 ViewController 中某个区域的子控制器。 为了简化,我删除了其中的一堆控件,但其余按钮将不再处理点击向下,尽管已启用,并且所有视图都启用了 userInteraction。

我尝试动态创建一个按钮,没有用。 认为我的原始构建资源不好,我删除了派生数据,退出 Xcode,删除应用程序并从头开始重建,不行。

最后我尝试用黄色绘制父视图的背景,没有出现确认问题是它的框架。 父视图框架在情节提要中类似于 (0,0,320,200),但在 viewDidAppear 中它的高度仅为 0 点,垂直偏移 150 点。 我尝试手动设置它,谢天谢地,黑客没有奏效。 所以我做了你应该对行为不端的故事板做的事情,我用火烧掉了它!

实际上我删除了它并创建了一个新的故事板来替换它,只包含新设计的视图和控件。 链接到我的 ViewController 代码,它工作没有任何问题。

如果您的 UIButton 嵌入在 UIScrollView 中,请确保禁用滚动视图属性Delay Touch Down ,这为我解决了问题

这取决于各种各样的事情和情况。

  1. 通过查看视图的层次结构来检查点击响应链​​,并查看一个视图是否位于另一个视图的顶部,并导致点击无法按您的预期工作,就像 HTML 中的 Z-index 一样!
  2. 检查视图的 userInteraction 是否设置为启用
  3. 如果您正在使用 Storyboard,请检查它是否连接到正确的动作,并检查您在情节提要中没有超过一个动作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM