从一个视图中删除一个视图并将其添加到另一个视图

Gar*_*gan 5 objective-c uiview addsubview ios

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

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

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

任何帮助,将不胜感激。

Mid*_* MP 6

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

因此使用:

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

根据UIView类参考

addSubview

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

- (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. 
Run Code Online (Sandbox Code Playgroud)

讨论区

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

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


pas*_*aya -1

我不确定这是否有效,但尝试切换[view removeFromSuperview];[self.contentView addSubview:view];。这是因为根据UIView类引用removeFromSuperview导致超级视图释放视图。

希望这可以帮助!