0

可以说我有一个AViewcontrollersand BviewControllers。我添加了一个 BViewcontrollers 视图作为视图的子Aviewcontrollers视图。我想BviewController从视图中删除AViewController视图。

我正在尝试以这种方式删除“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");
        }  }
4

3 回答 3

4

显而易见的答案是:

[bVC.view removeFromSuperview];

上面代码的问题是您正在检查视图是否是一个BviewControllers类,而不是BviewControllers. 如果视图有一个特定的类(比如Bview),那么你可以做那个检查(if ([subview isMemberOfClass:[BView class]]))。

使用isMemberOfClass:也非常具体,因此您通常最好使用isKindOfClass:

于 2013-05-28T19:43:38.243 回答
0

希望您的 bViewController 有对视图的引用?如果是这样,您可以致电:

[bVC.view removeFromSuperview]
于 2013-05-28T19:43:04.243 回答
0

除了将 B 的视图添加为 A 的子视图之外,考虑将 BViewController 添加为 AViewController 的子视图。这样做将允许转发自动旋转事件等;就像是:

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];
    }
}
于 2013-05-28T22:39:35.487 回答