Domanda

Ho un UIViewController che contiene un pulsante.Quando premo il pulsante aggiungo un controller di visualizzazione figlio utilizzando quanto segue.

- (IBAction)loadEditScreen:(id)sender {

self.editViewController = [[EditViewController alloc] init];

[self addChildViewController:self.editViewController];
[self.editViewController didMoveToParentViewController:self];

self.editViewController.view.alpha = 0;
[self.editViewController.view setFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];

[self.view addSubview:self.editViewController.view];

[self.editViewController setupImage:self.selectedImageView.image];

[UIView animateWithDuration:0.2
                      delay:0.0
                    options:0
                 animations:^{
                     self.editViewController.view.alpha = 1;

                 }
                 completion:^(BOOL finished){}];

}
- (void)closeEditScreen {

[self.editViewController willMoveToParentViewController:nil];
[self.editViewController.view removeFromSuperview];
[self.editViewController removeFromParentViewController ];

}
.

Ora il problema sembra essere che non sono sicuro di come andare a rimuovere il controller di vista figlio quando necessario.All'interno del controllore bambino ho un pulsante che chiama quanto segue.

- (IBAction)closeEditScreen:(id)sender {

HomeViewController *tmpController = [[HomeViewController alloc] init];
[tmpController closeEditScreen];

/*[UIView animateWithDuration:0.2
                      delay:0.0
                    options:0
                 animations:^{
                     self.view.alpha = 0;
                 }
                 completion:^(BOOL finished){
                     [self didMoveToParentViewController:nil];
                     [self.view removeFromSuperview];
                 }];*/

}
.

Il problema sembra essere che il metodo viene chiamato ma non succede nulla.La vista non viene rimossa anche se so che il metodo funziona perché ho impostato i punti di interruzione.

Qualsiasi aiuto sarebbe fantastico.Voglio solo aggiungere un childviewcontroller e quindi avere un pulsante nel bambino che rimuove il childviewcontroller quando premuto.

Grazie in anticipo

È stato utile?

Soluzione

In EditViewController closeEditScreen: (The Child VC) Stai creando una nuova istanza di HomeViewController (il genitore VC) e invoca closeEditScreen su quella nuova istanza.Questo è sbagliato, non vuoi una nuova istanza.

Cosa vuoi fare invece è invocare closeEditScreen sull'istanza HomeViewController che esiste già e che ha creato il tuo figlio VC.Prova questo:

- (IBAction)closeEditScreen:(id)sender
{
  // This is the instance of HomeViewController that you need
  UIViewController* parentViewController = self.parentViewController;
  // Cast the type so that you can invoke closeEditScreen without a compiler warning
  HomeViewController* parentHomeViewController = (HomeViewController*)parentViewController;
  [parentHomeViewController closeEditScreen];
}
.

Mentre questo dovrebbe portarti l'istanza di HomeViewController corretta con cui lavorare, non sono sicuro se il tuo approccio per rimuovere un figlio VC potrebbe non avere altri problemi.Se si incontrano più problemi, dovresti assolutamente leggere la guida alla programmazione VC citata nella risposta di Cy-4ah.

Altri suggerimenti

È necessario leggere Guida alla programmazione del controller per iOS .Il tuo codice è completamente sbagliato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top