我有一个包含多个子视图的视图,而这些子视图又有几个子视图。如果我触发事件,说触摸结束,在其中一个底层视图中,如何在根视图或二级视图中查看该事件生成视图的内容?
此外,任何想法如何捕捉该事件,然后释放中级视图,理论上将采用它的所有子视图,以便我可以绘制一个全新的视图到屏幕。尝试但是调用版本没有更新屏幕,尝试= nil,但这导致iPhone上的内存泄漏。任何想法>
由于 //:)
答案 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]
,这会产生释放视图的副作用。