我有两个类cellView(基本上是一个带有tap的单元格)和64 cellViews的委员会视图。在我的VC中,我想禁用/启用在特定事件上的所有交互。这是我的密码。
if(currentGame.isYourTurn==NO){
[divBoardView setUserInteractionEnabled:NO];
for(UIView*currentView in [divBoardView subviews]){
[currentView setUserInteractionEnabled:NO];
}
} else ..在单元格视图中,
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(cellTapped)];
[self addGestureRecognizer:tapRecognizer];我希望在不添加和删除tapGestureRecognisers的情况下禁用和启用交互。
发布于 2014-09-11 16:12:19
不需要迭代[divBoardView subviews]并设置每个人的userInteractionEnabled属性。只需在父视图上设置此属性,在这种情况下,divBoardView将禁用所有子视图的交互。
尽管如此,UITapGestureRecognizer不应该附加到divBoardView或您计划禁用的任何视图,因为如果userInteractionEnabled设置为NO,它不会触发。
根据您的设计,最好将手势识别器附加到viewController的view属性:
// Where self is the view controller
[self.view addGestureRecognizer:tapRecognizer];以及基于某种状态的过程交互:
@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这只是一个解决办法。很难推荐理想的解决方案,因为关于您的问题提供的信息很少。有更多的方法来完成相同的事情和最好的选择将取决于你目前的应用程序结构,设计等。
发布于 2014-09-11 15:56:16
userInteractionEnabled属性适用于设置属性的视图中的所有子视图。
同样的,点击手势识别器。如果您添加了一个识别器并设置了userInteractionEnabled = NO,那么该识别器就不会被解雇。
所以,你应该能.
divBoardView.userInteractionEnabled = NO;这将递归地工作在所有子视图(不完全是,但它将有相同的效果),并禁用任何识别器。
然后..。
divBoardView.userInteractionEnabled = YES;将再次启用一切。
https://stackoverflow.com/questions/25791851
复制相似问题