无法使用 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 一次性删除添加的 viewControllers 视图
自定义 UITableViewCells 和正确使用 prepareForReuse 和 removeFromSuperview
removeFromSuperview 的 EXC_BAD_ACCESS - 使用 ARC