【问题标题】:Why is my "touch up inside" event for my UIButton not being called?为什么我的 UIButton 的“内部修饰”事件没有被调用?
【发布时间】:2014-02-03 09:30:45
【问题描述】:

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

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

View -> Scroll View -> Subview -> Button

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

- (IBAction)favoritesButtonDepressed:(id)sender 

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

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

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

为了让子视图中的项目接收触摸事件,我让滚动视图看起来像 the 4th answer in this post

【问题讨论】:

  • 可能userInteractionEnabled 的按钮值是NO。所以按钮不能被点击。

标签: ios objective-c uibutton


【解决方案1】:

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

【讨论】:

  • 如果子视图位于父视图之外,则控制事件不会触发。为方便起见,将superview的clipSubviews属性设置为YES,这样就可以直观的识别出subviews frame。
  • @devgr 隐藏了我在超级视图高度之外的视图元素。我想要一种方法让按钮在不关心其位置的情况下工作:/,我该怎么办?
  • 在层次结构中查看哪个父视图较短
  • 运行应用后使用View Hierarchy按钮查看,包含该按钮的父视图是短的。这是正确答案!
【解决方案2】:

确保您的按钮位于 superView 的边界内
如果按钮位于 superView 的边界之外,则该按钮将无法点击,
因为hitTest函数的实现

【讨论】:

  • 非常有帮助!此外,遵循this question 的一些答案完全解决了我的问题。
【解决方案3】:

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

你应该像这样实现 UITapGestureRecognizer

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

        【解决方案6】:

        布局如下:

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

        通过勾选Subview(UIView)属性中的“User Interaction Enabled”复选框修复。

        【讨论】:

          【解决方案7】:

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

          ParentView -> ChildView -> StackView -> UIButton
          

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

          【讨论】:

            【解决方案8】:

            我最近也有类似的事情;

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

            【讨论】:

              【解决方案9】:

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

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

              【讨论】:

                【解决方案10】:

                疑难解答:

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

                【讨论】:

                  【解决方案11】:

                  确保button.isEnabled 未设置为false

                  【讨论】:

                    【解决方案12】:

                    我遇到了同样的问题。

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

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

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

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

                    【讨论】:

                      【解决方案13】:

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

                      【讨论】:

                        【解决方案14】:

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

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

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

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

                        【讨论】:

                          【解决方案15】:

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

                          【讨论】:

                            【解决方案16】:

                            这取决于各种事物和情况。

                            1. 通过查看视图的层次结构检查点击响应链​​并查看可能 一个视图位于另一个视图的顶部,导致单击无法正常工作 预计它就像 HTML 中的 Z-index!
                            2. 检查视图的 userInteraction 是否设置为启用
                            3. 如果您使用 Storyboard,请检查 连接到正确的操作并检查您没有超过一个 故事板中的动作。

                            【讨论】:

                              猜你喜欢
                              • 2023-03-09
                              • 1970-01-01
                              • 1970-01-01
                              • 2011-01-05
                              • 1970-01-01
                              • 1970-01-01
                              • 2021-01-18
                              • 2020-10-16
                              • 2018-07-11
                              相关资源
                              最近更新 更多