从视图中删除UITapGestureRecognizer而没有强指针

问题描述:

我在UIWindow上有UITapGestureRecognizer(TapGes),目标是UIViewController(vc)。从视图中删除UITapGestureRecognizer而没有强指针

我没有,我不能有一个强大的指针,从VC的TapGes。 因此,经过一段时间vc将要释放(当它完成时),并且此时我想从UIWindow中删除TapGes,但我还没有找到这样做的方法。

如果这是一个观点我会做这样的事情:

  1. 设置一个标记到该视图
  2. 反覆UIWindow子视图
  3. 找到UIView与标签
  4. 从上海华删除

问题是UITapGestureRecognizer没有办法将其标识为标签。

是否有该问题的一个解决方案的条件:

  • 不具有强指向UITapGestureRecognizer
  • 不添加辅助视图上UIWindowUITapGestureRecognizer添加到它,然后取下该视图。

谢谢。

+0

覆盖VC的取消分配方法和处理UITapGestureRecognizer引用? – x4snowman 2014-09-04 03:17:09

+0

我不能。在那个方法中,我想删除UITapGestureRecognizer,但我没有一个强指针,所以我不能做[self.view.window removeGestureRecognizer:] ... – Franklin 2014-09-04 03:21:38

+0

您可以使用弱属性来处理识别器,@属性(弱,非原子)UITapGestureRecognizer *在你的vc中点击。 – x4snowman 2014-09-04 03:24:41

当您的viewController被解除分配时,您可以枚举UIWindow的所有手势,并将它们各自的目标与self进行比较,然后删除UITapGestureRecognizer

如何获得的UITapGestureRecognizer目标,有两种解决方案:

解决方案一:子类UITapGestureRecognizer,添加一个名为myTarget保留目标弱性和覆盖的方法- (void)addTarget:(id)target action:(SEL)action

- (void)addTarget:(id)target action:(SEL)action 
{ 
    [super addTarget:target action:action] ; 
    _myTarget = target ; 
} 

如果你使用第一种解决方案,你应该使用isKindOfClass:来检查手势识别器是否属于你的子类。

解决方法二:从here

NSMutableArray *targets = [myGes valueForKeyPath:@"_targets"]; 
id targetContainer = targets[0];//get first target for example 
id targetOfMyGes = [targetContainer valueForKeyPath:@"_target"]; 
NSLog(@"%@", targetOfMyGes);//you can see reference for target object