1

在 appdidfinishlaunch 我正在加载一个 tabbarcontroller 作为子视图,然后我加载另一个视图

MySubView * mySubView = [[MySubView alloc] init];
[window addSubview:mySubView];
[mySubView release];

我想在子视图中通过按钮单击关闭该顶层,所以我设置了一个 IBAction 并尝试了不同的方法来强制关闭实际视图:

// 1.
[self.view removeFromSuperview];

// 2.
id  *delegate = [[UIApplication sharedApplication] delegate];
[[[delegate view] objectAtIndex:0] removeFromSuperview];


//3.
[[[delegate window] view] removeFromSuperview];

那么我怎样才能从窗口中弹出这个子视图呢?

欢呼西蒙

4

1 回答 1

6

你可以做几件事。一种方法是为视图分配一个唯一标签,然后使用该标签获取它,因此:

MySubView* mySubView = [[MySubView alloc] init];
[mySubView setTag:100];
[window addSubview:mySubView];
[mySubView release];

// later

[[[delegate window] viewWithTag:100] removeFromSuperview];

另一种方法是遍历窗口的子视图,直到找到一个是唯一类的实例,然后将其删除。所以:

MySubView* mySubView = nil;
for( UIView* view in [[delegate window] subviews] ) {
  if( [view isKindOfClass:[MySubView class]] ) {
    mySubView = (MySubView*)view;
    break;
  }
}
[mySubView removeFromSuperview];
于 2010-06-23T02:37:06.650 回答