【发布时间】:2014-05-06 14:23:54
【问题描述】:
我有以下设置。
+- XXXCustomControl : UIControl -------+
| A |
| +- ContentView -------------------+|
| | ||
| | B ||
| | ||
| +---------------------------------+|
+--------------------------------------+
作为 UIControl 子类的 XXXCustomControl。它包含一个名为 contentView 的 UIView 类型的子视图,其大小小于控件的区域。
那个视图有.userInteractionEnabled = YES;
我需要将该属性设置为 YES,因为水平滚动视图偶尔会放在其中,并且它们需要是可滚动的。如果超级视图(在我们的例子中,内容视图不允许用户交互,这会被子视图继承。)
但与此同时,这个XXXCustomControl 需要在其内容视图中不包含滚动视图时(不仅在区域 A 中,而且在区域 B 中)是可点击的。
所以我在这里有“利益冲突”,因为我要么
1)将内容视图设置为userInteractionEnabled = NO,然后我可以在A和B的内容视图区域中点击空控件,但是我将放置在那里的滚动视图将无法滚动。..
2)将内容视图设置为userInteractionEnabled = YES,但是如果控件为空,我只能点击区域A来触发触摸事件。
我想出的一个想法是,我将属性默认设置为 NO,当我填充 contentView 时,我将其设置为 yes。当我清除 contentView 时,我将属性设置回 no。 基本上我希望它一直设置为yes,当它为空时,强制contentView将touchUpInside事件传递给它的superview。
这可能吗?
【问题讨论】:
-
如果你只关心点击,为什么不向子视图添加一个手势识别器,它的动作与父视图中的手势识别器相同?这似乎是最简单的实现。
-
你为什么不给答案?迈克尔为我工作......
-
迟到总比不到好...
-
我认为这不是利益冲突的定义,也许是利益冲突? :)
标签: ios objective-c swift cocoa-touch