Die Entlassung modal-view-controller Ergebnisse in einen schwarzen Bildschirm
Dies ist meine Ansicht (controller) Hierarchie:
UITabBarController
(alsrootViewController
von der app)UINavigationController
(alsviewController
für eine dertabBar
tabs)UIViewController
(alsrootViewController
desUINavigationController
)UICollectionView
(als Untersicht)MyViewController.view
(als überschrift des Abschnitts " anzeigen desUICollectionView
)
Und so, ich brauche eine modale view controller aus MyViewController
. Ich habe versucht, es zu tun mit
[self presentViewController:modalVC animated:YES completion:nil];
und obwohl es funktionierte, Xcode hat mich gewarnt, dass "Präsentieren view-Controller auf detached view-Controller wird abgeraten", und das zu Recht, denn die modalVC füllt nur die Sicht der Sammlung Sicht-header, die nicht full-screen, die ich bin nach.
Alle anderen Optionen, die ich ausprobiert habe:
UITabBarController *tb = (UITabBarController *)self.view.window.rootViewController;
[tb presentViewController:modalVC animated:YES completion:nil];
or...
UINavigationController *nc = (UINavigationController *)tb.selectedViewController;
[tb presentViewController:modalVC animated:YES completion:nil];
or...
UICustomViewController *cv = (UICustomViewController *)nc.topViewController;
[vc presentViewController:modalVC animated:YES completion:nil];
präsentieren die modalVC full screen wie gewünscht, allerdings, wenn ich entlassen die modalVC durch den Aufruf
[self dismissViewControllerAnimated:YES completion:nil];
innerhalb modalVC selbst, modalVC in der Tat lehnt sich, aber ich bin Links mit einer schwarzen Bildschirm. Ein wenig debugging ergab, dass nach dem schließen modalVC, self.view.window.rootViewController
wird nil
.
Irgendeine Idee, warum dies passiert und wie man dieses Problem beheben?
BEARBEITEN
Dies ist eine iPhone-app. Der schwarze Bildschirm passiert, auf beiden iOS7 und iOS8. Auch, unten ist die Methode, wo ich einleiten MyViewController
#pragma mark - UICollectionViewDelegate methods
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {
self.myViewController = [[MyViewController alloc] initWithNibName:NSStringFromClass([MyViewController class]) bundle:nil];
return self.myViewController.view.frame.size;
}
- Können Sie zeigen Sie Ihre Einrichtung von
MyViewController
undMyViewController.view
? - Aaron, ich habe aktualisiert die Frage. Ist es das, was Ihr bittet? Ich mache das nicht zusätzliche setups in
MyViewController
selbst.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich die Lösung - diese Antwort wirklich geholfen. Der trick war in der dem schließen des view-Controllers. Es sollte wie folgt vorgenommen:
und nicht wie hier:
Obwohl der Autor der verlinkten Antwort deutet darauf hin, dass ein besserer Ansatz wäre die Verwendung von delegation (vorgestellt VC definiert ein Protokoll und Präsentation von VC zu abonnieren und dann entlassen die vorgestellt VC, sobald es verlangt wird), war es nicht möglich in meinem Fall.
Ist dies eine iPad-app? Wenn ja, hinzufügen
bevor
in
MyViewController
könnte den trick tun.Ich einige Informationen, die in Apple ' s UIViewController-Datei
Als Sie describled,die Sie direkt fügen Sie anzeigen in UIViewController zu einer anderen Ansicht . So viewDidAppear und viewDidDisappear nicht geltend gemacht werden.Ich denke, Sie würde besser ausführen dieser beiden Methoden manuell.