从视图中删除UITapGestureRecognizer而没有强指针
问题描述:
我在UIWindow
上有UITapGestureRecognizer
(TapGes),目标是UIViewController
(vc)。从视图中删除UITapGestureRecognizer而没有强指针
我没有,我不能有一个强大的指针,从VC的TapGes。 因此,经过一段时间vc将要释放(当它完成时),并且此时我想从UIWindow中删除TapGes,但我还没有找到这样做的方法。
如果这是一个观点我会做这样的事情:
- 设置一个标记到该视图
- 反覆
UIWindow
子视图 - 找到
UIView
与标签 - 从上海华删除
问题是UITapGestureRecognizer
没有办法将其标识为标签。
是否有该问题的一个解决方案的条件:
- 不具有强指向
UITapGestureRecognizer
- 不添加辅助视图上
UIWindow
到UITapGestureRecognizer
添加到它,然后取下该视图。
谢谢。
答
当您的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
覆盖VC的取消分配方法和处理UITapGestureRecognizer引用? – x4snowman 2014-09-04 03:17:09
我不能。在那个方法中,我想删除UITapGestureRecognizer,但我没有一个强指针,所以我不能做[self.view.window removeGestureRecognizer:] ... – Franklin 2014-09-04 03:21:38
您可以使用弱属性来处理识别器,@属性(弱,非原子)UITapGestureRecognizer *在你的vc中点击。 – x4snowman 2014-09-04 03:24:41