如题,本文主要介绍的是子控件超出父控件范围后点击超出的部分不能正常响应的问题。
之前,我们的 直播App TabBar 栏是有三个部分,中间部分是开播按钮。如图所示,是这样的:
后来产品要求把开播按钮悬浮在 TabBar 上,并凸出来,类似于这种效果:
就是在TabBar上加一个UIButton,但是这样就出现了一个新的问题,点击按钮超出TabBar范围的部分会不响应按钮的点击事件。后来经过研究,发现重写一个系统方法可以解决这个问题。
-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event {
if(CGRectContainsPoint(self.liveButton.frame, point) &&self.hidden==NO) {
return self.liveButton;
}else{
return [super hitTest:pointwithEvent:event];
}
}
这个方法的作用是确定响应点击事件的控件,利用这个方法,可以判断如果点击凸形按钮的位置的时候,返回这个按钮,即响应这个按钮的点击事件即可解决。
同样的,当需要做一个背景透明,里面有若干控件的View,你点击这 View 的透明部分的时候响应父控件的事件,点击子控件的时候响应子控件的事件,用这个方法也可以实现。简言之,这个方法就是在点击控件的时候根据你的需要响应不同控件的事件。
希望对大家有所帮助。