2010-06-09 155 views
17

我以编程方式将UIButton,UITextView作为子视图添加到了我的视图中。如何删除子视图

notesDescriptionView = [[UIView alloc]initWithFrame:CGRectMake(0,0,320,460)]; 
notesDescriptionView.backgroundColor=[UIColor redColor]; 
[self.view addSubview:notesDescriptionView]; 

textView = [[UITextView alloc] initWithFrame:CGRectMake(0,0,320,420)]; 
[self.view addSubview:textView]; 
printf("\n description button \n"); 

button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button 
    addTarget:self action:@selector(cancel:) 
    forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"OK" forState:UIControlStateNormal]; 
button.frame = CGRectMake(80.0, 420.0, 160.0, 40.0); 
[self.view addSubview:button]; 

这里,如果我们按一下按钮,我需要删除所有的子观点,

我试图

[self.view removeFromSuperView] 

,但它不工作

任何帮助。

回答

16

我假设你从同一个类的方法中调用[self.view removeFromSuperView]作为上面的代码片段。

在这种情况下,[self.view removeFromSuperView]从其自己的超级视图中移除self.view,但self是您希望从其视图中移除子视图的对象。如果你想删除的对象的所有子视图,你需要做的这个代替:

[notesDescriptionView removeFromSuperview]; 
[button.view removeFromSuperview]; 
[textView removeFromSuperview]; 

也许你会想通过该数组中的每个元素调用removeFromSuperview那些子视图存储在一个NSArray和环阵列。

+0

按钮,我已创建,通过添加为子视图。 实际上我试图用textview显示一个视图,当按下按钮时,当我点击当前视图中的另一个按钮时,它必须回到我以前的视图。 – mac 2010-06-09 12:28:27

+0

我试过 [notesDescriptionView removeFromSuperview]; [textView removeFromSuperview]; 但它不工作。 – mac 2010-06-09 12:37:49

+0

什么是正确的方式来调用这种方法,从其他类的超级视图中删除子视图?我试图委托方法,但它不起作用。 – SanitLee 2016-09-26 01:23:30

56

,删除所有添加到视图

使用下面的代码

for (UIView *view in [self.view subviews]) 
    { 
    [view removeFromSuperview]; 
    } 
+1

这应该是可以接受的答案! – Umitk 2015-11-20 06:49:47

7

我一直感到惊讶的是,Objective C的API没有一个简单的方法,将全部删除子视图来自UIView的子视图。 (闪存API做,你最终需要它了不少。)

Anwyay,这是我使用的小帮手方法:

- (void)removeAllSubviewsFromUIView:(UIView *)parentView 
{ 
    for (id child in [parentView subviews]) 
    { 
    if ([child isMemberOfClass:[UIView class]]) 
    { 
     [child removeFromSuperview]; 
    } 
    } 
} 

编辑:刚刚发现一更优雅的解决方案在这里:What is the best way to remove all subviews from you self.view?

现在用的是如下内容:

// Make sure the background and foreground views are empty: 
    [self.backgroundContentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
    [self.foregroundContentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

我如T帽子更好...

Erik