【发布时间】:2012-01-23 02:44:36
【问题描述】:
我有两个视图,viewA 和 viewB。我用
在 viewA 上加载 viewB[self.view addSubview: viewB.view];
我不想删除 viewB,但我不知道该怎么做。我试过了
[self.view removeFromSuperview];
但这不起作用。我该怎么做?
【问题讨论】:
标签: objective-c ios view
我有两个视图,viewA 和 viewB。我用
在 viewA 上加载 viewB[self.view addSubview: viewB.view];
我不想删除 viewB,但我不知道该怎么做。我试过了
[self.view removeFromSuperview];
但这不起作用。我该怎么做?
【问题讨论】:
标签: objective-c ios view
致电-removeFromSuperviewviewB.view。
【讨论】:
-[viewB performSelector:withObject:withObject:]: message sent to deallocated instance 0xf568d40
要从其父视图中删除 viewB 的视图,您需要对该视图调用 removeFromSuperview。
[viewB.view removeFromSuperview];
removeFromSuperview
取消接收者与其父视图和窗口的链接,并将其移除 来自响应者链。
【讨论】:
通过使用 removeFromSuperView,您走在了正确的轨道上。但是您需要将消息发送到要删除的视图。就像Till例子
[viewB.view removeFromSuperview];
但是,如果您不使用属性和综合方法,则在您想要删除它时,您可能没有 viewB 的句柄。我会使用@property 和@synthesize。所以你可以使用:
[self.viewB.view removeFromSuperview];
另一种方法是使用这个:(假设您的 viewB.view 是您添加到 viewA.view 的最后一个视图
[[self.view.subviews objectAtIndex:(self.view.subviews.count - 1)]removeFromSuperview];
您可以通过以下方式获取 viewA 的所有子视图的列表:
NSLog(@"subviews of viewA.view: %@",self.view.subviews);
【讨论】:
lastObject 来获取数组的最后一个对象(而不是 self.view.subviews.count - 1)
removeFromSuperview 是我的选择。