6

我正在尝试查找笔尖中的所有视图并将它们添加到我的内容视图中。

这就是我所拥有的,它成功地从 self.view 中删除了视图,但它没有将它添加到 self.contentView

for (UIView *view in self.view.subviews) {
    if (view.tag != 666) {
        [view removeFromSuperview];
        [self.contentView addSubview:view];
    }
}

任何帮助,将不胜感激。

4

7 回答 7

7

您的代码中的问题是,当您调用removeFromSuperview视图时,父视图将释放该视图。无需调用removeFromSuperview,只需将其添加为另一个视图的子视图即可将其从当前父视图中删除。

所以使用:

for (UIView *view in self.view.subviews)
{
    if (view.tag != 666)
    {
        [self.contentView addSubview:view];
    }
}

根据UIView 类参考

添加子视图

将视图添加到接收者的子视图列表的末尾。

- (void)addSubview:(UIView *)view

参数

看法

The view to be added. This view is retained by the receiver. After being added, this view appears on top of any other subviews. 

讨论

此方法保留视图并将其下一个响应者设置为接收者,这是它的新超级视图。

视图只能有一个超级视图。如果视图已经有一个超级视图并且该视图不是接收者,则此方法会在将接收者设为新的超级视图之前删除先前的超级视图

于 2013-06-08T14:51:57.600 回答
1

当您从中删除视图时superView,它将releasememory. 所以在你的情况下,你需要这样做:

UINib *infoNib = [UINib nibWithNibName:@"YourXIBFileName" bundle:nil];

NSArray *topLevelObjects = [infoNib instantiateWithOwner:self options:nil];

UIView *infoView = [topLevelObjects objectAtIndex:0];
for (UIView *view in infoView.subviews) {
        [self.contentView addSubview:view];
    }
}
于 2013-06-08T17:23:09.787 回答
0
  for (UIView *v in innerMainView.subviews)
    {
        [v removeFromSuperview];
    }   
    [innerMainView addSubview:StandardView];
于 2012-06-15T05:50:16.830 回答
0

您可以将指定的视图设置为属性,也可以将视图添加到内容视图中,然后再将其从超级视图中删除。我不确定当你删除视图时,如果视图的保留计数减少到 0,它会调用超级视图来释放它。

于 2012-06-15T09:27:55.983 回答
-1

检查错误。您最好打印这些视图的框架(self.view、self.contentView)。并使它们具有不同的颜色。然后你可以看到错误。祝你好运!

于 2012-06-15T03:46:47.757 回答
-1

我不确定这是否可行,但请尝试切换[view removeFromSuperview];[self.contentView addSubview:view];. 这是因为根据UIViewClass ReferenceremoveFromSuperview导致 superview 释放视图。

希望这可以帮助!

于 2012-06-15T03:34:09.837 回答
-1

contentView不属于 的财产UIVew。它属于UITableViewCell的属性。它返回单元格对象的内容视图。

于 2012-06-15T05:23:41.057 回答