超出父视图的子视图的点击范围

问题

  • 有时候们会遇到这样的需求,在一个View 上了UIButton,而UIButton是的范围是超出了View的,这时候,如果点击UIButton 是没效果的,如图:在UITabBar上的中间大按钮,点击大按钮tabBar 已外的区域,正常是没效果的


    超出父视图的子视图的点击范围_第1张图片
    Simulator Screen Shot 2016年6月17日 下午4.55.24.png

解决办法

  • 1.自定义UITabBar:建一个继承UITabBar的类:XJTabBar
  • 2.在XJTabBar 实现以下方法
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {

NSLog(@"%@", NSStringFromCGPoint(point));

if (self.clipsToBounds || self.hidden || (self.alpha == 0.f)) {

return nil;

}

UIView *result = [super hitTest:point withEvent:event];

if (result) {

return result;

}

for (UIView *subview in self.subviews.reverseObjectEnumerator) {

CGPoint subPoint = [subview convertPoint:point fromView:self];

result = [subview hitTest:subPoint withEvent:event];

if (result) {

return result;

}

}

return nil;

}


'```

  • 3.在自定义的UITabBarController,的- (void)viewDidLoad 方法
    调用此方法
/**
 *  利用 KVC 把系统的 tabBar 类型改为自定义类型。
 */
- (void)setUpTabBar {
    [self setValue:[[CYLTabBar alloc] init] forKey:@"tabBar"];
}

你可能感兴趣的:(超出父视图的子视图的点击范围)