从uiviewcontroller中删除自定义视图
问题描述:
假设我有AViewcontrollers
和BviewControllers
。我添加了一个BViewcontrollers视图作为Aviewcontrollers
视图的子视图。我想从AViewController
视图中删除BviewController
视图。从uiviewcontroller中删除自定义视图
我想以这种方式去除'b视图'但它不成功。
AViewcontrollers *aVC = [[AviewControllers alloc] initWithNibName:@"AViewcontrollers" bundle:nil];
BViewcontrollers *bVC = [[BviewControllers alloc] initWithNibName:@"BViewcontrollers" bundle:nil];;
[aVC addsubView:bVc.view];
//Trying to remove the 'b view' from the 'a view'
for (UIView *subview in [[aVC view] subviews]) {
NSLog(@"Subview::%@",[subview class]);
if ([subview isMemberOfClass:[BViewControllers class]]) {
[subview removeFromSuperview];
NSLog(@"This subview Belongs to tools view controller");
} }
答
希望你的bViewController有一个对视图的引用?如果是的话,你可以拨打:
[bVC.view removeFromSuperview]
答
明显的答案是:
[bVC.view removeFromSuperview];
上面代码的问题是,你检查,如果认为是BviewControllers
一个BviewControllers
类,而不是一个视图。如果视图有特定类别(如Bview
),则可以执行该检查(if ([subview isMemberOfClass:[BView class]])
)。
使用isMemberOfClass:
也很特殊所以你平时最好使用isKindOfClass:
答
考虑加入BViewController作为AViewController的孩子,除了加入B的看法是A的子视图这样做将允许转发自转事件等等;喜欢的东西:
AViewController *aVC = [[UIViewController alloc] init];
BViewController *bVC = [[UIViewController alloc] init];
[aVC addChildViewController:bVC];
[bVC didMoveToParentViewController:aVC];
[aVC.view addSubview:bVC.view];
然后,当你要删除的视图(和控制器),您可以通过子视图控制器迭代。 (或以其他方式存储指针)
for (UIViewController *vc in aVC.childViewControllers){
if ([vc isKindOfClass:[BViewController class]]){
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
[vc didMoveToParentViewController:nil];
}
}
我会注意到,这种设计模式看起来有点脆弱。您可能需要考虑将此视图完全由AviewController控制。 – atreat
我们添加一个控制器,并删除应用程序进入background.we时没有参考bvc.view – phani