2010-06-23 3 views
1

En appdidfinishlaunch je charge un tabbarcontroller comme sous-vue et après im chargement d'une autre vueiPhone: la force de se retirer sous-vue

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

Je veux fermer cette couche supérieure avec un ButtonClick dans la sous-vue, donc Je mis en place un IBAction et essayé des choses diffrent pour forcer la vue réelle de fermer:

// 1. 
[self.view removeFromSuperview]; 

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


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

Alors, comment puis-je pop cette sous-vue depuis la fenêtre?

acclamations Simon

Répondre

6

Vous pourriez faire une ou deux choses. Un moyen serait d'attribuer une étiquette unique à la vue et l'obtenir en utilisant cette étiquette plus tard, donc:

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

// later 

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

Une autre est à itérer les sous-vues de la fenêtre jusqu'à ce que vous trouviez un qui est une instance de votre classe unique puis supprime ça. Donc:

MySubView* mySubView = nil; 
for(UIView* view in [[delegate window] subviews]) { 
    if([view isKindOfClass:[MySubView class]]) { 
    mySubView = (MySubView*)view; 
    break; 
    } 
} 
[mySubView removeFromSuperview]; 
+0

J'ai eu le concept et j'ai essayé les deux variations mais j'ai seulement des erreurs. surtout: sélecteur non reconnu envoyé à l'instance. j'ai aussi changé [window addSubview: infostartView.view]; –

+0

@Simon: Vous devez poster plus de code ou décrire le problème plus. Si vous avez configuré comme décrit ci-dessus, vous n'obtiendrez aucune erreur. Je n'ai aucune idée de ce qu'est une instance d'infostartView, puisque vous n'avez pas fourni un tel contexte. –