从uiviewcontroller中删除自定义视图

问题描述:

假设我有AViewcontrollersBviewControllers。我添加了一个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] 
+0

我会注意到,这种设计模式看起来有点脆弱。您可能需要考虑将此视图完全由AviewController控制。 – atreat

+0

我们添加一个控制器,并删除应用程序进入background.we时没有参考bvc.view – phani

明显的答案是:

[bVC.view removeFromSuperview]; 

上面代码的问题是,你检查,如果认为是BviewControllers一个BviewControllers类,而不是一个视图。如果视图有特定类别(如Bview),则可以执行该检查(if ([subview isMemberOfClass:[BView class]]))。

使用isMemberOfClass:也很特殊所以你平时最好使用isKindOfClass:

+0

我们如何验证BView?我们没有它的一个实例,我们在一个视图中添加和在另一个视图中删除 – phani

+0

对不起,我不明白这个问题。您需要一些方法来识别视图,最好是对其的引用或已知的标记值。试图比较这个班级是最不可靠/可维护的。 – Wain

考虑加入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]; 
    } 
} 
+0

我们正在开发一款iPad和iPhone应用程序。在ipad中,我们将它提供给popovercontroller并使用我们解雇的通知。在iPhone的情况下,我们将它添加为子视图。在我的项目中,我们正在添加一个视图控制器,并删除应用程序去背景 – phani

+0

我仍然会这样做的iPhone,这是一个很好的做法,保持viewcontroller层次结构与视图层次结构同步。对于iPad弹出窗口,您已经将视图控制器传递给弹出窗口,所以它自动处理其余部分。 – Nick