首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按钮上方的活动指示器防止单击识别

按钮上方的活动指示器防止单击识别
EN

Stack Overflow用户
提问于 2011-11-14 16:00:43
回答 3查看 503关注 0票数 3

我有一个UIButton "bn“和一个UIActivityIndicator "ai”,在按钮上方(ai.center = bn.center)。

只要ai是可见的和有动画的,我就不能按下ai的框架下的按钮,但是超出了我可以的范围。

我是否必须将GestureRecognition添加到ai,还是有更明智的方法单击"ai“。

致以亲切的问候。$h@rky

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-16 13:41:43

你能简单地设置ai.userInteractionEnabled = NO;吗?我很惊讶它是在活动指示器上启用的--这是一个标准组件还是您已经创建了一个子类?

顺便说一句,交互元素被另一个视图所覆盖通常是糟糕的UI设计,尤其是用来表示“忙”的元素,但在可点击的缩略图的例子中,这似乎是有意义的。

票数 2
EN

Stack Overflow用户

发布于 2011-11-14 16:22:50

您需要重写UIView方法

代码语言:javascript
运行
复制
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

在父视图中。如果点击在按钮内,则返回按钮,否则返回零。这是对这一方法的讨论的一部分:

此方法通过向每个子视图发送pointInside:withEvent: message来确定哪个子视图应该接收触摸事件,从而遍历视图层次结构。如果pointInside:withEvent:返回是,那么子视图的层次结构将被遍历;否则,视图层次结构的分支将被忽略。您很少需要自己调用此方法,但是您可能会覆盖它,以隐藏触摸事件,使其不受子视图的影响。

编辑:

假设您有一个包含bn和ai的UIView子类,您可以实现如下方法

代码语言:javascript
运行
复制
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if (CGRectContainsPoint(bn.frame, point)) {
        return bn;
    }
    return nil;
}

这样,您的按钮将获得触摸事件(如果它们在它的框架内),无论是否有什么东西在上面。你不需要做任何其他的事。

票数 0
EN

Stack Overflow用户

发布于 2011-11-16 13:43:08

使用以下内容:

首先,使用以下方法覆盖创建UIActivityIndicator的子类:

代码语言:javascript
运行
复制
@interface MyActivityIndicator: UIActivityIndicator
@end

@implementation MyActivityIndicator

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
    return NO;
}

@end

之后,在项目中使用MyActivityIndicator无处不在,而不是UIActivityIndicator (在NIB文件或代码中,取决于您在何处创建它)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8124301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档