2012-06-19 29 views
1

我已經擁有幾個子視圖的應用程序添加使用到的SuperView刪除在UIView的層次和跳躍的所有意見,第一種觀點

[self.view addSubview:subview.view]; 

所有不同的視圖控制器,並具有自定義後退按鈕來回到主/第一視圖。到現在爲止沒有問題。

在應用程序的某些部分,我必須從屏幕/子視圖4跳轉到第一個視圖,在此處重新創建第一個視圖。 (使用initWithNibName和addSubview)。這增加了應用程序的內存。

爲了解決這個問題,我想刪除所有子視圖並返回第一個視圖,因爲它已經存在但不可見,而不是再次創建第一個視圖。

如何實現這一目標?

請幫忙。

在此先感謝

+0

@Mobility您好會[[self.view子視圖] makeObjectsPerformSelector:@selector(removeFromSuperView)]就夠了?它來自我的頭頂,所以把它作爲sudo代碼而不是確切的代碼語法。 – bennythemink

+0

@bennythemink我想從視圖層次結構中刪除所有視圖,而不僅僅是視圖上的子視圖。這項工作是否一樣? – iOSDev

+1

嗨@Mobility如果你使用的是iOS5,你可以遍歷所有的子視圖控制器,將它們從它們的超級視圖和[subViewController removeFromParentViewController]中移除。這應該將它們從顯示器和層次結構中刪除 – bennythemink

回答

0

如果你想刪除所有的子視圖和前來的firstView:

//here view where you want remove all sub views containing in view 
    [[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperView)]; 

這樣做是爲了保持一個子視圖上的觀點:

NSArray *allSubViews = [self.view subviews]; 
    for(int i= 0; [allSubViews count];i++) 
    { 
     if(i !=0) 
     { 
      UIView *view = [allSubViews objectAtIndex:i]; 
      [view removeFromSuperview]; 
     } 
    } 
+0

我剛剛做了這個,這給了我一個視圖添加的子視圖列表,例如輕觸欄,按鈕,uitableview。但我希望所有的視圖層次結構中的屏幕,並刪除所有這些,並跳回到主屏幕 – iOSDev

+0

而不是視圖使用像NSArray * allSubViews = [主屏幕子視圖]的主屏幕參考; –

2

可以聲明標籤特定視圖的值,並根據您的需要移除所有視圖:

*爲

{

如果(圖isKindOfClass:[UIView類])(*的UIView在[self.view子視圖]子視圖)

{

if (subview.tag == 101 || subview.tag == 102) 

{

[subview removeFromSuperview]; 

}

}

} *

有此線下方的示例代碼:在由XIB創建 'BTN' 這個代碼按鈕和哪些調用btnClicked方法


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    myViewNew = [[UIView alloc] initWithFrame:CGRectMake(50, 40, 150, 150)]; 
    [myViewNew setTag:102]; 
    [myViewNew setBackgroundColor:[UIColor redColor]]; 

    myView = [[UIView alloc] initWithFrame:CGRectMake(50, 40, 150, 150)]; 
    [myView setTag:101]; 
    [myView setBackgroundColor:[UIColor blueColor]]; 

    btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [btn1 setFrame:CGRectMake(50, 50, 50, 50)]; 
    btn1.titleLabel.text = @"btn1"; 
    [myView addSubview:btn1]; 

    [btn1 addTarget:self action:@selector(btn11Pressed:) forControlEvents:UIControlEventTouchUpInside]; 

    btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [btn2 setFrame:CGRectMake(50, 50, 50, 50)]; 
    btn2.titleLabel.text = @"btn2"; 
    [myViewNew addSubview:btn2]; 

    [btn2 addTarget:self action:@selector(btn2Pressed) forControlEvents:UIControlEventTouchUpInside]; 


} 

-(void)btn2Pressed 
{ 
    for (UIView *subview in [self.view subviews]) 
    { 
     if(view isKindOfClass:[UIView class]) 

     { 

     if (subview.tag == 101 || subview.tag == 102) 
     { 
      [subview removeFromSuperview]; 
     } 
     } 

     } 
} 

-(void) btn11Pressed:(id)sender 
{ 
    [self.view addSubview:myViewNew]; 
} 

-(IBAction)btnClicked:(id)sender 
{ 
    [self.view addSubview:myView]; 
} 
相關問題