添加子视图后未收到touches已删除/已移动/已取消

问题描述:

标题或多或少地说明了一切。为了回应touchesBegan事件,我的UIViewController重新上色并添加了一些子视图。它不会收到touchesEnded。我猜是因为添加的子视图会以某种方式拦截事件。我试图在子视图上调用resignFirstResponder无济于事。添加子视图后未收到touches已删除/已移动/已取消

当我不添加子视图和触摸事件被正常调用时,代码工作正常。

任何想法?

谢谢

编辑:细节和我如何修复它。

基本上我有一个子视图的主视图,当我触摸子视图时,事件会传递到主视图,但是,在这个事件中,我删除了子视图并在它们的位置添加了新子视图。触摸起源于不再存在的子视图意味着触摸的其余部分丢失。

我解决了这个问题通过重写则hitTest:withEvent在我的母版视图,停止触摸有朝一日能兑子视图

+2

任何代码? +++++ – kennytm 2010-03-22 14:20:10

+0

嗯,代码是相当复杂的,但我编写了一个最简单的例子来张贴在这里,它的工作正常...所以+1在正确的方向微调...... ........会发布时,我已经找出了差异 – Sam 2010-03-22 15:48:56

你尝试将它作为一个子视图之前设置userInteractionEnabled属性不为子视图?

+0

不,这听起来很有希望,会尝试... – Sam 2010-03-25 16:34:39

+0

也许某些子视图通过实现不合格的-touchesEnded:withEvent消耗该事件? – ZhangChn 2011-09-06 07:14:06

你将需要通过从子视图触摸到使用像这样的测试上海华:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    [super touchesBegan:touches withEvent:event]; 
} 
+0

子视图也没有收到事件。如果我将子视图添加到touchesBegan事件发生的位置,子视图和超级视图都不会接收touchesMoved/Canceled/Ended – Sam 2010-03-22 09:41:27

+3

这会将触摸传递给superCLASS,而不是superVIEW。 ;) – Pascal 2010-03-25 15:57:52