2014-04-21 85 views
3

我想禁用整个视图的用户交互,但也允许在视图上点按手势。假设主视图上方有一个菜单,并且如果用户再次点击主视图,则后菜单消失。但是,只要显示菜单,则应禁用与主视图的所有其他交互。 这里是我尝试做的是: 我定义的tapGestureRecognizer这样的:禁用用户交互但在UIViewController中允许点按手势

@interface GroupMasterViewController() <SWRevealViewControllerDelegate> 

@property NSMutableArray *groups; 
@property (nonatomic, strong) UITapGestureRecognizer *tapGestureRecognizer; 

@end 

在我viewDidLoad方法我有这样的:

self.tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self.revealViewController action:@selector(rightRevealToggle:)]; 
[self.view addGestureRecognizer:self.tapGestureRecognizer]; 
self.tapGestureRecognizer.enabled = NO; 

而且在委托方法,被解雇时,菜单打开或关闭:

- (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position 
{ 
    if (position == FrontViewPositionLeftSide) { 
     self.tapGestureRecognizer.enabled = YES; 
     self.view.userInteractionEnabled = NO; 
     self.tabBarController.tabBar.userInteractionEnabled = NO; 
    } 
    else if (position == FrontViewPositionLeft){ 
     self.tapGestureRecognizer.enabled = NO; 
     self.view.userInteractionEnabled = YES; 
     self.tabBarController.tabBar.userInteractionEnabled = YES; 

    } 
} 

问题是,tapGestureRecognizer不再工作了,如果我禁用用户交互。

非常感谢您的帮助。

+0

要禁用整个视图,以便UITapGestureRecognizer不会work.Please使意见的主视图的子视图,并启用和禁用你想 – Rose

回答

4

如果您在禁用用户交互的同时尝试启用tapGestureRecogizer将会产生冲突,因此,我认为这是最直截了当的解决方案:与其关闭整个视图的用户交互,您应该对每个用户交互的意见,你想不响应触摸。例如:

- (void)revealController:(SWRevealViewController *)revealController willMoveToPosition:(FrontViewPosition)position 
{ 
    if (position == FrontViewPositionLeftSide) { 
     self.tapGestureRecognizer.enabled = YES; 
     self.button1.userInteractionEnabled = NO; 
     self.button2.userInteractionEnabled = NO; 
     self.tabBarController.tabBar.userInteractionEnabled = NO; 
    } 
    else if (position == FrontViewPositionLeft){ 
     self.tapGestureRecognizer.enabled = NO; 
     self.button1.userInteractionEnabled = YES; 
     self.button2.userInteractionEnabled = YES; 
     self.tabBarController.tabBar.userInteractionEnabled = YES; 

    } 
} 
+0

认为你会怎么做,如果你有一个表格视图,如果用户点击该表格视图,它应该关闭菜单。如果我禁用表格视图的用户交互,那么水龙头不再工作。 – andreaspfr

+0

您只需要禁用表视图上的交互,但将手势识别器添加到视图控制器的主视图,即'self.view'。只是这样你仍然可以在不影响表格视图的情况下点击视图。 –

1

我认为不可能禁用用户交互,然后期望一些用户交互事件。您可能会针对特定事件显示progress bar以阻止用户互动。