iOS -- 子视图超出父视图范围点击无法响应的问题

    xiaoxiao2026-05-23  4

    发现问题:

          如下图显示,由于项目中多个界面用到上边这种横条,于是将其单独封装,下边的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; }

    总结:

     从下往上依次传递遇到其中一个无法传递,那么便跳过它,传递给下一个能传递的或者能响应的。

    出现问题不可怕,总会有解决办法的。

    转载请注明原文地址: https://ju.6miu.com/read-1309988.html
    最新回复(0)