Oh Mann, das bereitete mir ein paar Tage lang Kopfschmerzen und konnte nicht herausfinden, wie ich das machen sollte. Das Schlimmste war, dass das Erstellen eines neuen Xcode iOS-Projekts mit der Master-Detail-Vorlage einwandfrei funktionierte. Glücklicherweise war diese kleine Tatsache am Ende, wie ich die Lösung fand.
Es gibt einige Beiträge, die darauf hindeuten, dass die Lösung darin besteht, die neue primaryViewControllerForCollapsingSplitViewController:
Methode zu implementieren UISplitViewControllerDelegate
. Ich habe das ohne Erfolg versucht. Was Apple in der Master-Detail-Vorlage tut, die zu funktionieren scheint, ist die Implementierung der neuen splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:
Delegat-Methode ( atmen Sie tief ein, um all dies zu sagen) (wieder aktiviert UISplitViewControllerDelegate
). Laut den Dokumenten ist diese Methode:
Fordert den Delegierten auf, den primären Ansichtscontroller anzupassen und den sekundären Ansichtscontroller in die reduzierte Schnittstelle zu integrieren.
Lesen Sie den Diskussionsteil dieser Methode, um genauere Informationen zu erhalten.
Apple geht folgendermaßen damit um:
- (BOOL)splitViewController:(UISplitViewController *)splitViewController
collapseSecondaryViewController:(UIViewController *)secondaryViewController
ontoPrimaryViewController:(UIViewController *)primaryViewController {
if ([secondaryViewController isKindOfClass:[UINavigationController class]]
&& [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]]
&& ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] detailItem] == nil)) {
// Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
return YES;
} else {
return NO;
}
}
Diese Implementierung führt im Wesentlichen Folgendes aus:
- Wenn
secondaryViewController
es das ist, was wir erwarten (a UINavigationController
) und es zeigt, was wir erwarten (a DetailViewController
- Ihr View Controller), aber kein Modell hat ( detailItem
), dann " Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
"
- Andernfalls kehren Sie zurück, "
NO
damit der Controller für geteilte Ansichten versuchen kann, den Inhalt des Controllers für sekundäre Ansichten in die reduzierte Oberfläche zu integrieren".
Die Ergebnisse sind für das iPhone im Hochformat wie folgt (entweder im Hochformat oder im Hochdrehen - oder genauer gesagt in der kompakten Größenklasse):
- Wenn Ihre Ansicht korrekt ist
- und hat ein Modell, zeigen Sie die Detailansicht Controller
- Hat aber kein Modell, zeigen Sie den Master View Controller
- Wenn Ihre Ansicht nicht korrekt ist
- Zeigen Sie den Master View Controller an
Klar wie Schlamm.
UISplitViewController
und kehre immerYES
von dieser Methode zurück. Dann habe ich die Klasse für geteilte Ansichten in Storyboard geändert, da ich den Master immer im Hochformat auf dem iPhone anzeigen möchte. :)