发现问题:
如下图显示,由于项目中多个界面用到上边这种横条,于是将其单独封装,下边的UItableView是加在上边的横条上的,也就是是说UitableView的父视图是半透明的横条,很显然子视图UItableView 超出了父视图的范围,这样点击cell的时候根本没有反应。
问题原因:
点击响应是从从底部往上依次传递的,当点击UITableView的时候,由地图这层往上传递的时候,半透明的横条视图没有包含使用者点击的点的坐标,所以没有办法继续传递,解决的思路是跳过横条view直接让tableView响应点击。
解决方法:
重写
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;如果点击无法响应,即无法传递点击,判断点击的坐标是否是tableView所包含的区域,
如果是则让tableView响应点击
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *view = [super hitTest:point withEvent:event];
if (view == nil) {
//将坐标由当前视图发送到 指定视图 fromView是无法响应的范围小父视图
CGPoint stationPoint = [_stationTypeChooseView.tableView convertPoint:point fromView:self];
if (CGRectContainsPoint(_stationTypeChooseView.tableView.bounds, stationPoint))
{
view = _stationTypeChooseView.tableView;
}
}
return view;
}
总结:
从下往上依次传递遇到其中一个无法传递,那么便跳过它,传递给下一个能传递的或者能响应的。
出现问题不可怕,总会有解决办法的。