在一个主视图上添加了一个子视图,然后在主视图和子视图中各加一个touchesBegan:withEvent ,调试时点击子视图的区域,发现只有主视图响应了触摸事件,子视图没有任何响应。子视图中的userInteractionEnabled已经设置为YES。
大家有遇过这类问题吗?如何解决?谢谢!

解决方案 »

  1.   

    感觉不应该呀!我刚刚写了demo测试一下superView和subView都是UIView的子类,点击没有问题;后将subview修改为UILabel的子类,点击测试,在没有设置userInteractionEnabled的情况下是都触发superView的,但是设置userInteractionEnabled后点击触发subview的。
    不解了你是怎么碰到的情况,建议贴代码看看~
      

  2.   

    我在第一个view也就是主View的viewDidLoad里添加代码:
    PbT3ViewController *v1 = [[PbT3ViewController alloc]initWithNibName:@"PbT3ViewController" bundle:nil];
    [self.view addSubview:v1.view];
    然后在子View(PbT3ViewController)添加以下代码:
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    }
    调试时子视图是完全覆盖主视图的,我点击之后没有响应touchesBegan::消息!
    请问你们也是按这个方法来测试的吗?
      

  3.   

    问题解决了!
    在主视图添加子视图的时候要加行代码
    [self.view addSubview:v1.view];
    [self addChildViewController:v1];
    这样即可解决!你们也是这样测试的吗?
      

  4.   

    不好意思我不是用这样的情况测试的,所以没有出现你说的情况!
    你这样解决完全可以的,但我觉得问题出现的原因是这样:UIView是通过“响应链”来决定那个View处理点击事件的,如果subview有处理,那么就由subview处理了(如:UIButton),如果没有;再检查subview是否有viewController,如果有,让viewController处理,再没有才会发给superview处理,一直这样...
    我猜想你的问题是:你在[self.view addSubview:v1.view];后将v1释放了,所以当v1.view查找自己viewController时发现没有,所以将事件发给了superview处理了。你解决的方法[self addChildViewController:v1];是因为这样保持了v1让他没有释放,所以就ok了,同时注意这个方法是5.0以后才有的,5.0以前的是不行的。我感觉通用的办法是将v1作为一个成员变量,使用时一直存在,不使用时在释放。