2010-10-15 3 views

Répondre

0

Normalement, pour un "rejeter" bouton J'appellerais une méthode dans le contrôleur qui a présenté le mod Al contrôleur (utiliser un délégué), ne pas essayer de rejeter le contrôleur de vue modale de l'intérieur de lui-même. Je ne comprends pas très bien ce que vous essayez de faire, mais cette [auto-libération] est mauvaise. Je ne pense pas que tu veuilles jamais te libérer comme ça.

+0

Je réutilise la même vue, mais je dois l'appeler différemment, en l'ajoutant comme sous-vue et en la poussant modalement. – Jules

+0

Je pense que je vois ce que tu veux dire. Peut-être créer votre propre ivar appelé subviewPresentedModally BOOL, avoir ce soit défini par tout ce qui présente la vue, puis dans la méthode "rejeter" juste si() sur ce point. Fondamentalement, il suffit de créer votre propre version de la variable que vous essayez de si(). – Nimrod

0

Essayez ceci en vous viewcontroller modal:

- (IBAction)close:(id)sender { 
    [self.parentViewController dismissModalViewControllerAnimated:YES]; 
} 

Ensuite il suffit de connecter l'action du bouton pour cette méthode.

+0

Non cela ne fonctionne pas, comme je l'appelle avec [window addSubview: lvc.view]; J'ai besoin d'un IF et ELSE car j'appelle la vue de deux manières différentes – Jules

1

Quelques choses:

1) Vous ne devriez jamais vous libérer dans un objet. Si vous présentez un contrôleur de vue modal, vous devez effectuer la sortie là-bas depuis le contrôleur de vue sera désormais retenu par la propriété .modalViewController du contrôleur de vue:

(Dans le parent):

UIViewController *someViewController = [[UIViewController alloc] init]; 
[self presentModalViewController:someViewController animated:YES]; 
[someViewController release]; 

2 Le parent stockera son contrôleur de vue modale enfant dans .modalViewController. L'enfant aura sa propriété .parentViewController dans ce cas. Si la vue a été ajoutée en tant que sous-vue, sa propriété .superview sera définie. Cependant, ils ne s'excluent pas mutuellement, alors soyez prudent. En règle générale, les UIViewControllers sont destinés à héberger des vues en plein écran et si vous ajoutez la vue en tant que sous-vue, vous devez vous demander si la vue doit simplement être une sous-classe UIView et déplacer la logique dans le contrôleur parent.

Cela dit, je suppose que vous pouvez vérifier votre cas (en supposant que vous ne faites pas présent contrôleur de vue modal et ajouter au sous-vue en même temps):

if (self.parentViewController) { 
    [self dismissModalViewControllerAnimated:YES]; 
} else if (self.view.superview) { 
    [self.view removeFromSuperview] 
} 

Dans ce dernier cas SuperView, le contrôleur de vue sera toujours traîner, donc vous devez laisser l'autre contrôleur de vue savoir via la méthode de délégué ou quelque chose pour vous libérer. Dans le premier cas, si vous avez déjà libéré le contrôleur de vue présenté comme décrit ci-dessus, il sera libéré automatiquement lorsque le contrôleur de vue parent positionne sa propriété .modalViewController sur zéro.

Questions connexes