从超级视图中删除视图

时间:2012-01-13 16:09:41

标签: iphone objective-c

我在self.view中添加了几个按钮。当用户点击一个按钮时,我将加载另一个视图(subView)。我加载subView的代码如下所示

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上的按钮或任何内容。当我将鼠标光标停在按钮上一段时间后,我可以点击它,否则我不能。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

尝试删除这样的子视图:

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

        [subView removeFromSuperview];
    }
}

答案 1 :(得分:2)

这一行:

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

真的是:

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

答案 2 :(得分:1)

我认为你的问题是你做的

[self.subView viewWithTag:1];

但您要删除的视图由self.view“拥有”,因此它应该是

[self.view viewWithTag:1];

但是如果您有对subView的引用,为什么要再次搜索它?为什么不马上:

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

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