场景:在原有更新弹框 下面加个关闭按钮,只能点击关闭去掉弹框,不是点击屏幕黑屏自由落下;
由于关闭按钮在父视图外面,又得接受事件,只能把父类自定义继承于UIView,重写hittest方法,目的是返回点击的视图
遇到的问题是:1,必须通过 UIButton *btn = (UIButton *)[self findView:subView withPoint:point withEvent:event]; 找到对应的btn,并且根据宽度区分另外的
2,关闭按钮不能在控制器的外面,这样重写hittest也不会反应到,坑了n久;
所以修改sb,把控制器里面自定义视图YFHitTestVIews底部提高80像素;让关闭按钮出现在控制器里面,但实际关闭按钮还在他的父视图YFHitTestVIews 外面。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *result = [super hitTest:point withEvent:event];
UIView *view = [self findView:self withPoint:point withEvent:event];
// if (view) {
//
// return view;
// }
if ([view isKindOfClass:[UIButton class]]) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"YFVersionsUpdateViewController" object:nil ];
return view;
}
return result;
}
- (UIView *)findView:(UIView *)view withPoint:(CGPoint)point withEvent:(UIEvent *)event
{
// DLog(@"进来了");
if ([view isKindOfClass:[UIButton class]]) {
return view;
}
for (UIView *subView in view.subviews) {
UIButton *btn = (UIButton *)[self findView:subView withPoint:point withEvent:event];
if(btn.size.width<100){
CGPoint buttonPoint = [btn convertPoint:point fromView:self];
if ([btn pointInside:buttonPoint withEvent:event]) {
return btn;
}
}
// if ([subView isKindOfClass:[UIButton class]]) {
// return subView;
// break;
// }
}
return nil;
}
好久不玩这玩意了,差点忘了,以为父视图重写个方法就行了,半天捕获不到事件,可以在视图的外面,但是不能再控制器的外面!