当你离开并回到那个视图时,手势识别器是否保持活动状态?

时间:2016-04-18 09:52:43

标签: ios objective-c uigesturerecognizer

我使用此方法在多个视图中设置手势识别器。

- (void) setupNavbarGestureRecognizer {
    UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(navDoubleTap)];
    gestureRecognizer.numberOfTapsRequired = 2;
    CGRect frame = CGRectMake(self.view.frame.size.width/4, 0, self.view.frame.size.width/2, 44);
    UIView *navBarTapView = [[UIView alloc] initWithFrame:frame];
    [self.navigationController.navigationBar addSubview:navBarTapView];
    navBarTapView.backgroundColor = [UIColor clearColor];
    [navBarTapView setUserInteractionEnabled:YES];
    [navBarTapView addGestureRecognizer:gestureRecognizer];
    _navbarGestureActive = YES;
}

我注意到当我转到另一个视图并在主视图中双击时,程序崩溃了。

所以我这样做了:

-(void)viewWillAppear:(BOOL)animated{
    [self setupNavbarGestureRecognizer];
}

我注意到我不必在其他视图控制器中执行相同的操作,只能在主视图控制器中执行相同操作,并且只能在从另一个VC返回之后执行相同操作。

我担心每次加载视图和gestureRecognizer。很明显,旧版本仍处于活动状态,因为崩溃只是双击而且只有一个识别出来的gestureRecognizer。

在某种程度上,手势识别器和它的处理程序(navDoubleTap)之间存在脱节,并且没有使用任何代理。

我应该提到它在主VC中工作正常,直到我离开并回来。

更新:我遇到的问题是,每次“setupNavbarGestureRecognizer'被调用,它添加了一个新的视图和gestureRecognizer。这是在几个VC中完成的,而指针却迷失了。

我的解决方案是在进入和离开每个视图时删除视图和gestureRecognizers,然后在viewWillAppear中调用setupNavbarGestureRecognizer。

也许不是最好的方法,但它正在发挥作用。

0 个答案:

没有答案