【问题标题】:Removing view from its superview从其超级视图中删除视图
【发布时间】:2012-01-13 16:09:40
【问题描述】:

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

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    尝试像这样删除子视图:

    for (UIView *subView in self.view.subviews) {
        if (subView.tag == (int)yourSubViewTag) {
    
            [subView removeFromSuperview];
        }
    }
    

    【讨论】:

    • yourSubViewTag 是什么?那里应该有什么?
    • 你想比较的标签.. "1", "2", or "152" int yourSubViewTag = 1; subView.tag=yourSubViewTag;
    • 但是有Vicent说过,如果你有参考(房产)你可以马上去做:[subView removeFromSuperview];不需要搜索。
    【解决方案2】:

    这行应该:

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

    真的是:

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

    ?

    【讨论】:

      【解决方案3】:

      我认为你的问题是你这样做

      [self.subView viewWithTag:1];
      

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

      [self.view viewWithTag:1];
      

      但是如果你有对 subView 的引用,为什么还要再搜索呢?为什么不立即:

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

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

      【讨论】:

      • 我正在使用 ARC。所以不需要删除
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多