无法使用 removeFromSuperview 方法删除视图

Posted

技术标签:

【中文标题】无法使用 removeFromSuperview 方法删除视图【英文标题】:Unable to remove view using removeFromSuperview method 【发布时间】:2011-08-22 14:02:10 【问题描述】:

我无法删除视图。我正在使用 addsubview 方法添加视图,但是当我使用 RemoveFromSuperView.

// 这里我从登录按钮添加视图

medicalViewObject=[[MedicalInfoViewController alloc] initWithNibName:@"MedicalInfoViewController" bundle:nil];
    [self.view addSubview:medicalViewObject.view];

//这里我在另一个ViewController中写RemoveFromSuperView

-(void)BackToMainView

    [self.view removeFromSuperview];

【问题讨论】:

【参考方案1】:

它不起作用,因为您将 removeFromSuperview 发送到错误的视图对象。这就是你需要的:

[medicalViewObject.view removeFromSuperview];

编辑:

您的问题表明您有一个视图(因为您的问题中没有包含此视图的名称,所以我将其简称为 MainView),然后您将一个名为 medicalViewObject 的子视图添加到您的 MainView。您还有一个方法调用“BackToMainView”,您想要执行 removeFromSuperview 函数。您的问题表明您的 medicalViewObject 中的某些用户操作(例如按下按钮)应该调用“BackToMainView”方法。

如果这一切都正确,那么我上面的回答是正确的。但根据您的评论,听起来您还需要在您的 medicalViewObject 中实现一个委托协议,然后让您的“MainView”采用该协议。

在你的 medicalViewObject 中的委托声明中,你需要有一个这样的方法调用:

-(void)backButtonWasPressed;

在 MainView 的实现中,它应该看起来像这样:

-(void)backButtonWasPressed

    [medicalViewObject.view removeFromSuperview];

所以现在,无论您在 medicalViewObject 中使用什么用户操作来返回主视图(无论是按钮还是其他对象),它都需要调用以下内容:

[delegate backButtonWasPressed];

根据您的情况,它可能看起来有些不同,但这是完成您正在尝试做的事情的一种相当常见的方式。我希望这会有所帮助。

【讨论】:

嘿,伙计,我正在导航到另一个视图,这意味着 MedicalInfoViewController 视图......我需要从那个视图回来。我该怎么做..我需要创建那个 MedicalInfoViewController 的对象还是什么。 【参考方案2】:

当您调用[self.view removeFromSuperview]; 时,您是在告诉您所在的任何视图控制器删除它自己的视图。您应该从完全相同的 MedicalInfoViewController 中调用该行,或者从外部告诉 medicalViewObject 删除其视图,例如 [medicalViewObject.view removeFromSuperview];

【讨论】:

嘿伙计,我正在导航到另一个视图,这意味着 MedicalInfoViewController 视图...我需要从那个视图返回。我该怎么做..我需要创建那个 MedicalInfoViewController 的对象还是什么。 您必须以某种方式将该命令发送到原始 MedicalInfoViewController。这意味着您需要保留对它的引用,以便向它发送消息。

以上是关于无法使用 removeFromSuperview 方法删除视图的主要内容,如果未能解决你的问题,请参考以下文章

removeFromSuperview() 耗时过长

使用 removeFromSuperview 一次性删除添加的 viewControllers 视图

自定义 UITableViewCells 和正确使用 prepareForReuse 和 removeFromSuperview

removeFromSuperview 的 EXC_BAD_ACCESS - 使用 ARC

VBPieChart - removeFromSuperView 不起作用(隐藏图表)

出口集合 removefromsuperview