我有一个UIButton“ bn ”和一个UIActivityIndicator“ ai ”位于按钮(ai.center = bn.center
)上方。
只要 ai 可见且动画效果,我就无法按下 ai的框架下方的按钮,但超出了我的范围。
我是否必须将GestureRecognition添加到 ai ,或者是否有更智能的方式点击“ ai ”。
亲切的问候。 $ H @ RKY
答案 0 :(得分:2)
您可以简单地设置ai.userInteractionEnabled = NO;
吗?无论如何,我很惊讶它在一个活动指示器上启用 - 这是一个标准组件还是你做了一个子类?
顺便说一句,通常是糟糕的UI设计,有一个由另一个视图覆盖的交互元素,特别是用于表示某些东西“忙”的视图,但在你的可点击缩略图的例子中,它似乎有道理。
答案 1 :(得分:0)
您需要覆盖UIView方法
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
在父视图中。如果点击在按钮内,则返回按钮,否则返回nil。这是关于这种方法的讨论的一部分:
此方法通过发送遍历视图层次结构 pointInside:withEvent:消息到每个子视图以确定哪个 子视图应该会收到触摸事件。如果pointInside:withEvent: 返回YES,然后遍历子视图的层次结构;否则,它 视图层次结构的分支被忽略。你很少需要打电话 方法你自己,但你可以覆盖它来隐藏触摸事件 子视图强>
编辑:
假设您有一个包含bn和ai的UIView子类,您可以实现这样的方法
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (CGRectContainsPoint(bn.frame, point)) {
return bn;
}
return nil;
}
这样你的按钮就能获得触摸事件(如果它们在它的框架内),无论它是否在它之上。你不需要做任何其他事情。
答案 2 :(得分:0)
使用以下内容:
首先,使用以下方法覆盖为UIActivityIndicator创建子类:
@interface MyActivityIndicator: UIActivityIndicator
@end
@implementation MyActivityIndicator
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
return NO;
}
@end
之后,在项目的任何地方使用MyActivityIndicator而不是UIActivityIndicator(在NIB文件或代码中,取决于你在哪里创建它)