如果放置在两个视图之间,UIButton不会触发操作

时间:2017-01-11 13:50:31

标签: ios button uigesturerecognizer

我有一个与通讯员@IBAction相关联的UIButton。这样的按钮恰好位于两个相邻视图的中间

|--------------|----------------| | view1 | button | view2 | |--------------|----------------|

UIButton是view1的子视图(重要!),但位于中间,使用的帧为'x'位置的负值。

两个视图都有一个UITapGestureRecognizer,用于触发一些东西。

问题如下:如果我点击按钮的左侧(视图1上的那个),则触发IBAction,而如果我点击按钮的右侧部分(视图2上的那个),则IBAction是未触发,而view2上的UIGestureRecognizer是。

我知道这可能是因为按钮属于view1而不是view2,但有没有办法检测到它?

我尝试了建议的方法

override func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
   /*detect if you tapped button or view*/
}

是正确调用的,但总是说点击的视图是view2。

由于

4 个答案:

答案 0 :(得分:0)

我建议你使用两个按钮,使它们看起来像一个,每个按钮在view1和view2靠近。如果按钮上有标题,则在按钮后面有一个标签,其框架与view1上的当前按钮相同,并使两个按钮的背景颜色为clearcolor。为两个按钮保持相同的目标和选择器。简单易行。

答案 1 :(得分:0)

确保在故事板中按钮位于视图上方,请参阅随附的屏幕截图,其中按钮位于textField上方。enter image description here

答案 2 :(得分:0)

您的按钮可能会被其他一个视图覆盖,因此这些视图会吞下这些视图。我建议运行您的应用程序并使用调试菜单的视图调试选项来查看视图的层次结构。我现在不在我的Mac上,所以我不能给你特定的命令,但是有一个菜单选项可以暂停你正在运行的应用程序,并显示你的前后视图层次结构的3d表示。找出这样的东西是非常宝贵的。

答案 3 :(得分:0)

如果您的按钮是view1的子视图,则view1边界之外的按钮将不会注册。这就是为什么你可以点击左侧,但不是右侧。

最好将view1,view2和同一超视图的按钮子项放在一起,并确保在两个视图的顶部添加按钮。