我有一个包含多个子视图的视图。当用户点击子视图时,子视图的大小会扩大以覆盖大部分屏幕,但其他一些子视图在下面仍然可见。
当子视图之一像这样“展开”时,我希望我的应用程序忽略对其他子视图的触摸。有没有一种简单的方法可以实现这一目标?我可以编写代码来处理这个问题,但我希望有一种更简单的内置方法。
希望这有帮助...
[[yourSuperView subviews]
makeObjectsPerformSelector:@selector(setUserInteractionEnabled:)
withObject:[NSNumber numberWithBool:FALSE]];
这将禁用视图直接子视图的用户交互。然后将用户交互提供给您想要的唯一视图
yourTouchableView.setUserInteraction = TRUE;
EDIT:
在 iOS 中,似乎在父视图上禁用 userInteraction 并不会在其子视图上禁用 userInteraction 。所以上面的代码(我的意思是带有 makeObjectsPerformSelector:
)只能用于禁用父视图的直接子视图的 userInteraction 。
请参阅用户 madewulf 的答案,该答案递归地获取所有子视图并禁用所有子视图的用户交互。或者,如果您需要在项目中的许多地方禁用此视图的 userInteraction,您可以对 UIView 进行分类以添加该功能..类似这样的事情就可以了..
@interface UIView (UserInteractionFeatures)
-(void)setRecursiveUserInteraction:(BOOL)value;
@end
@implementation UIView(UserInteractionFeatures)
-(void)setRecursiveUserInteraction:(BOOL)value{
self.userInteractionEnabled = value;
for (UIView *view in [self subviews]) {
[view setRecursiveUserInteraction:value];
}
}
@end
现在你可以打电话
[yourSuperView setRecursiveUserInteraction:NO];
另外,用户 @lxt 建议在所有视图之上添加一个不可见视图,这是另一种方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)