UIButton在添加到子视图时没有收到触摸,但在添加到主视图时会收到

Posted

技术标签:

【中文标题】UIButton在添加到子视图时没有收到触摸,但在添加到主视图时会收到【英文标题】:UIButton not receiving touches when added to subview, but does when added to main view 【发布时间】:2012-07-05 13:34:40 【问题描述】:

基本上我有一个主屏幕,屏幕底部有一个背景图像和三个菜单选项。当我将这 4 个组件添加到 RootViewController 的视图中时,一切正常。但是如果我执行类似的操作

_mainContainer = [[UIView alloc] init];
self.view = _mainContainer;
_firstScreen = [[UIView alloc] initWithFrame:self.view.frame];

"some code here setting up the subviews"

[buttonLeft addTarget:self action:@selector(startGame) forControlEvents:UIControlEventTouchUpInside];

[_firstScreen addSubview:mainMenuBackground];
[_firstScreen addSubview:buttonLeft];

[_firstScreen addSubview:buttonMid];
[_firstScreen addSubview:buttonRight];
[_mainContainer addSubview:_firstScreen];

基本上,如果我将所有内容直接添加到 _mainContainer,按钮就可以工作,如果我将它添加到 _firstScreen,然后添加 _firstScreen,它们就不起作用。

在 _firstScreen 上启用了用户交互。我稍后在我的应用程序中做了类似的事情,它工作正常。另外,不确定这是否与它有关,但是尽管我的屏幕以横向显示,并且 plist 中的所有选项都设置为仅横向,但当我运行转换时,例如 FlipFromBottom(或其他任何名称),我的应用程序认为“底部”是屏幕处于纵向状态,直到我移动到应用程序中的另一组子视图。 (所以基本上标题屏幕表现得很糟糕)。

我到处寻找解决方案,希望我没有遗漏一些基本的东西。

【问题讨论】:

【参考方案1】:

什么是mainMenuBackground?,如果是图片,则不需要将其设置为子视图,正确的方法是将其设置为背景图片。我希望这能解决你的问题

【讨论】:

为了简单起见,我只是将其注释掉。所以现在我要做的就是将三个按钮添加到一个子视图中,然后将该子视图添加到 rootViewController 的视图中,并且这些按钮仍然不起作用。 我已经修好了。感谢 Ranjit,虽然它与问题无关,但它确实帮助我解决了问题。我回去编辑我的代码来设置我的 UIView _firstScreen 的背景,但没有出现。所以我意识到 _firstScreen = [[UIView alloc] initWithFrame:self.view.frame];实际上并没有设置帧大小。它仍然是0乘0;我不完全确定为什么会这样,因为 _mainContainer 的行为就像它的帧大小与屏幕大小相等。

以上是关于UIButton在添加到子视图时没有收到触摸,但在添加到主视图时会收到的主要内容,如果未能解决你的问题,请参考以下文章

NSLayoutConstraint 后子视图中的 UIButton 未收到触摸

检测 UIButton 触摸子视图

将 UIButton 添加到子视图不起作用

Swift - 将目标添加到子视图内的 UIButton

UIButton 没有注册触摸

添加为页脚视图时,UIButton 没有响应