从其超级视图中删除视图

问题描述:

我在self.view中添加了几个按钮。当用户点击一个按钮时,我将加载另一个视图(子视图)。我的代码,其中我加载子视图被示出在下面从其超级视图中删除视图

subView = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.scrollView.contentSize.width, self.scrollView.contentSize.height)]; 
subView.tag=1; 
// and then i add various other components to it 

[self.view addSubview:subView]; // and finally add it to the view 

当用户触摸该视图中,我检测到它并删除视图(ⅰ已经有了这样的检测部)。

这是我如何删除我的观点

UIView *v = [self.subView viewWithTag:1]; 
    v.hidden = YES; 
    [v endEditing:YES]; 
[v removeFromSuperview]; 

视图自败,但我不能点击按钮或任何东西,这是在self.view。当我按住鼠标光标一段时间,我可以点击它,否则我不能。我该如何解决这个问题?

我觉得你的问题是,你做

[self.subView viewWithTag:1]; 

,但你要删除的观点是“拥有”的self.view所以应该是

[self.view viewWithTag:1]; 

但是,如果您有一个对子视图的引用,为什么再次搜索它?为什么不立刻道:

self.subView.hidden = YES; 
[self.subView endEditing:YES]; 
[self.subView removeFromSuperview]; 

顺便说一句,你可能想看看你的内存管理,我看你的Alloc你的子视图,但我没有看到它被释放,当视图被再次删除。也许你会这样做,你只是不显示代码,在这种情况下忘记我的评论。

+0

我正在使用ARC。所以不必删除 – Illep 2012-01-13 16:47:52

如果这一行:

UIView *v = [self.subView viewWithTag:1]; 

真的是:

UIView *v = [self.view viewWithTag:1]; 

尝试删除这样子视图:

for (UIView *subView in self.view.subviews) { 
    if (subView.tag == (int)yourSubViewTag) { 

     [subView removeFromSuperview]; 
    } 
} 
+0

什么是'yourSubViewTag'?那里应该有什么? – Illep 2012-01-13 16:48:31

+0

您想比较的标签。“1”,“2”或“152”'int yourSubViewTag = 1; subView.tag = yourSubViewTag;' – Frade 2012-01-13 16:51:24

+0

但有Vicent说,如果你有一个引用(属性),你可以立即做到:'[subView removeFromSuperview];'不需要搜索它。 – Frade 2012-01-13 16:54:09