在obj c中查找事件生成器

时间:2009-09-04 17:28:19

标签: iphone objective-c memory-management uiview event-handling

我有一个包含多个子视图的视图,而这些子视图又有几个子视图。如果我触发事件,说触摸结束,在其中一个底层视图中,如何在根视图或二级视图中查看该事件生成视图的内容?

此外,任何想法如何捕捉该事件,然后释放中级视图,理论上将采用它的所有子视图,以便我可以绘制一个全新的视图到屏幕。尝试但是调用版本没有更新屏幕,尝试= nil,但这导致iPhone上的内存泄漏。任何想法>

由于 //:)

3 个答案:

答案 0 :(得分:3)

touches<Began|Moved|Ended|Cancelled>:withEvent:的第二个参数是UIEvent的实例。可以询问UIEvent属于特定视图的触摸。这对于针对特定视图的触摸起作用是有用的。例如:

-(void)touchedEnded:(NSSet*)touched withEvent:(NSEvent*)event;
{
  NSSet* aParticularViewsTouches = [event touchesForView:aParticularView];
  // DO some stuff
}

通过在父级上调用示例addSubview:insertSubview:atIndex:,将子视图添加到视图层次结构中。删除子视图不是很明显,您必须在子视图上调用removeFromSuperview。作为一个例子,我添加然后删除子视图:

[parentView addSubview:childView];
[childView removeFromParentView];

因此,如果您想删除具有已知索引的子视图,但您没有对它的引用,那么您可以这样做:

-(void)removeChildviewAtIndex:(NSUInteger)index;
{
  UIView* childView = [[parentView.childviews objectAtIndex:index];
  [childView removeFromParentview];
}

如果您在类别中将此方法添加到UIView,那么只需将parentView替换为self即可。

答案 1 :(得分:1)

要找到最下方的视图:

tappedView = [view hitTest:point withEvent:event]

要与孩子一起观看视图,请使用:

[view removeFromSuperview];

答案 2 :(得分:0)

对于第二部分,您要调用[view removeFromSuperview],这会产生释放视图的副作用。