2010-06-23 51 views
1

在appdidfinishlaunch我加载一个tabbarcontroller作为子视图和IM之后加载其他视图iPhone:从子视图力本身除去

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

我要关闭顶层与在子视图buttonclick,所以我建立了一个IBAction为,并试图指出错误的事情,迫使实际视图关闭:

// 1. 
[self.view removeFromSuperview]; 

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


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

因此,如何能我弹出窗口,从该子视图?

欢呼 西蒙

回答

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]; 
+0

我得到的概念,并尝试这两种变化,但我只得到错误。主要是:无法识别的选择器发送到实例。我也改变了[window addSubview:infostartView.view]; – 2010-06-23 15:10:32

+0

@Simon:你必须发布更多的代码或更多地描述问题。如果您按上述方式进行了设置,则不会出现任何错误。我不知道什么是infostartView实例,因为你没有提供任何这样的上下文。 – 2010-06-23 20:52:49