首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在UIView及其子视图中禁用Tap手势(所有交互)?

如何在UIView及其子视图中禁用Tap手势(所有交互)?
EN

Stack Overflow用户
提问于 2014-09-11 15:45:50
回答 2查看 4.2K关注 0票数 1

我有两个类cellView(基本上是一个带有tap的单元格)和64 cellViews的委员会视图。在我的VC中,我想禁用/启用在特定事件上的所有交互。这是我的密码。

代码语言:javascript
复制
if(currentGame.isYourTurn==NO){
    [divBoardView  setUserInteractionEnabled:NO];
    for(UIView*currentView in  [divBoardView  subviews]){
        [currentView  setUserInteractionEnabled:NO];
    }
} else ..

在单元格视图中,

代码语言:javascript
复制
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc]
   initWithTarget:self action:@selector(cellTapped)];
[self addGestureRecognizer:tapRecognizer];

我希望在不添加和删除tapGestureRecognisers的情况下禁用和启用交互。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-11 16:12:19

不需要迭代[divBoardView subviews]并设置每个人的userInteractionEnabled属性。只需在父视图上设置此属性,在这种情况下,divBoardView将禁用所有子视图的交互。

尽管如此,UITapGestureRecognizer不应该附加到divBoardView或您计划禁用的任何视图,因为如果userInteractionEnabled设置为NO,它不会触发。

根据您的设计,最好将手势识别器附加到viewController的view属性:

代码语言:javascript
复制
// Where self is the view controller
[self.view addGestureRecognizer:tapRecognizer];

以及基于某种状态的过程交互:

代码语言:javascript
复制
@interface YourViewController ()

@property (assign, nonatomic) BOOL isBoardActive;

@end



@implementation 

- (void)handlerTap:(UITapGestureRecognizer *)tap {

    UIView *viewControllerView = tap.view.
    CGPoint location           = [tap locationInView:viewControllerView];

    if (_isBoardActive && CGRectContainsPoint(_boardView.frame, location)) {
        // Process tap on board   
    } else {
        // Process tap elsewhere
    }
}

@end

这只是一个解决办法。很难推荐理想的解决方案,因为关于您的问题提供的信息很少。有更多的方法来完成相同的事情和最好的选择将取决于你目前的应用程序结构,设计等。

票数 2
EN

Stack Overflow用户

发布于 2014-09-11 15:56:16

userInteractionEnabled属性适用于设置属性的视图中的所有子视图。

同样的,点击手势识别器。如果您添加了一个识别器并设置了userInteractionEnabled = NO,那么该识别器就不会被解雇。

所以,你应该能.

代码语言:javascript
复制
divBoardView.userInteractionEnabled = NO;

这将递归地工作在所有子视图(不完全是,但它将有相同的效果),并禁用任何识别器。

然后..。

代码语言:javascript
复制
divBoardView.userInteractionEnabled = YES;

将再次启用一切。

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

https://stackoverflow.com/questions/25791851

复制
相关文章

相似问题

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