我有一个UIButton "bn“和一个UIActivityIndicator "ai”,在按钮上方(ai.center = bn.center)。
只要ai是可见的和有动画的,我就不能按下ai的框架下的按钮,但是超出了我可以的范围。
我是否必须将GestureRecognition添加到ai,还是有更明智的方法单击"ai“。
致以亲切的问候。$h@rky
发布于 2011-11-16 13:41:43
你能简单地设置ai.userInteractionEnabled = NO;吗?我很惊讶它是在活动指示器上启用的--这是一个标准组件还是您已经创建了一个子类?
顺便说一句,交互元素被另一个视图所覆盖通常是糟糕的UI设计,尤其是用来表示“忙”的元素,但在可点击的缩略图的例子中,这似乎是有意义的。
发布于 2011-11-14 16:22:50
您需要重写UIView方法
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event在父视图中。如果点击在按钮内,则返回按钮,否则返回零。这是对这一方法的讨论的一部分:
此方法通过向每个子视图发送pointInside:withEvent: message来确定哪个子视图应该接收触摸事件,从而遍历视图层次结构。如果pointInside:withEvent:返回是,那么子视图的层次结构将被遍历;否则,视图层次结构的分支将被忽略。您很少需要自己调用此方法,但是您可能会覆盖它,以隐藏触摸事件,使其不受子视图的影响。
编辑:
假设您有一个包含bn和ai的UIView子类,您可以实现如下方法
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (CGRectContainsPoint(bn.frame, point)) {
return bn;
}
return nil;
}这样,您的按钮将获得触摸事件(如果它们在它的框架内),无论是否有什么东西在上面。你不需要做任何其他的事。
发布于 2011-11-16 13:43:08
使用以下内容:
首先,使用以下方法覆盖创建UIActivityIndicator的子类:
@interface MyActivityIndicator: UIActivityIndicator
@end
@implementation MyActivityIndicator
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
return NO;
}
@end之后,在项目中使用MyActivityIndicator无处不在,而不是UIActivityIndicator (在NIB文件或代码中,取决于您在何处创建它)
https://stackoverflow.com/questions/8124301
复制相似问题