Wie kann die Merkmalserfassung für den ursprünglichen UIViewController überschrieben werden? (mit Storyboard)

8

Ich habe eine App, die auf iOS8 abzielt, und der erste View-Controller ist UISplitViewController. Ich benutze ein Storyboard, damit es alles für mich instantiiert.

Aufgrund meines Designs benötige ich SplitViewController, um Master- und Detailansichten im Hochformat auf dem iPhone anzuzeigen. Also suche ich nach einer Möglichkeit, die Merkmalssammlung für diesen UISplitViewController außer Kraft zu setzen.

Ich habe festgestellt, dass ich

verwenden kann %Vor%

Leider gibt es jedoch nur Methoden, um die Sammlungen von Kind-Controller-Eigenschaften zu überschreiben:

%Vor%

und ich kann dies nicht für mich in meiner UISplitViewController-Unterklasse tun.

Ich habe eine Beispielanwendung überprüft Adaptive Fotos von Apple. Und in dieser App Autor verwenden spezielle TraitOverrideViewController als root und einige Magie in seinem ViewController Setter, um alles funktioniert.

Es sieht schrecklich für mich aus. Gibt es einen Weg, Eigenschaften zu überschreiben? Oder wenn nicht, wie kann ich den gleichen Hack mit dem Storyboard verwenden? Mit anderen Worten, wie man einige ViewController als root eingibt, nur um Eigenschaften für meinen UISplitViewController mit Storyboard zu behandeln?

    
Ilya Belikin 25.08.2014, 10:01
quelle

6 Antworten

5

Ok, ich wünschte, es gäbe einen anderen Weg, aber im Moment habe ich einfach den Code aus dem Apple-Beispiel in Swift konvertiert und für die Verwendung mit Storyboards angepasst.

Es funktioniert, aber ich glaube immer noch, dass es eine schreckliche Art ist, dieses Ziel zu archivieren.

Mein TraitOverride.swift:

%Vor%

Damit es funktioniert, müssen Sie einen neuen UIViewController auf dem Storyboard hinzufügen und ihn zum Initial machen. Fügen Sie Ihrem realen Controller den folgenden Show-Übergang hinzu:

Sie müssen den Abschnitt "toSplitVC" benennen:

und initialen Controller als TraitOverride setzen:

Jetzt sollte es auch für dich funktionieren. Lassen Sie es mich wissen, wenn Sie einen besseren Weg oder irgendwelche Fehler in diesem finden.

    
Ilya Belikin 29.08.2014, 09:50
quelle
5

Ich verstehe, dass Sie hier eine SWIFT-Übersetzung haben wollten ... Und Sie haben das wahrscheinlich gelöst.

Unten ist etwas, das ich viel Zeit damit verbracht habe, zu lösen - mein SplitView auf einem iPhone 6+ arbeiten zu lassen - das ist eine Cocoa-Lösung.

Meine Anwendung basiert auf TabBar und die SplitView verfügt über Navigationscontroller. Am Ende war mein Problem, dass setOverrideTraitCollection nicht an das richtige Ziel gesendet wurde.

%Vor%     
David Wilson 11.01.2015 01:46
quelle
4

Ich weiß, dass es mehr als ein Jahr her ist, seit die Frage gestellt wurde, aber ich denke, meine Antwort wird jemandem wie mir helfen, der mit der akzeptierten Antwort keinen Erfolg erzielt.

Wenn die Lösung wirklich einfach ist, können Sie traitCollection: method einfach überschreiben. Hier ist ein Beispiel aus meiner App:

%Vor%

Die Idee besteht darin, die kompakte Größenklasse auf dem iPad zu erzwingen, wenn der Controller als Popover oder als Formblatt dargestellt wird.

Ich hoffe, es hilft.

UPDATE:

Apple empfiehlt das nicht:

  

Verwenden Sie die Eigenschaft traitCollection direkt. Überschreibe es nicht. Unterlassen Sie   eine benutzerdefinierte Implementierung bereitstellen.

Ich benutze diese Methode nicht mehr! Jetzt implementiere ich overrideTraitCollectionForChildViewController: in der übergeordneten viewControler-Klasse.

    
Oleg_Korchickiy 20.01.2016 19:46
quelle
1

Ja, es muss den benutzerdefinierten Container View Controller verwenden, um die Funktion zu überschreiben viewWillTransitionToSize . Sie verwenden das Storyboard, um den Container View Controller als initial festzulegen. Sie können auch diese gute artical , die das Programm verwenden, um es zu implementieren. Demnach könnte Ihr Urteilsvermögen einige Einschränkungen haben:

%Vor%

anders als

%Vor%

"

    
Jenus Dong 02.12.2014 10:21
quelle
1

Requisiten für @Ilyca

Schnell 3

%Vor%     
Brandon A 25.04.2017 00:20
quelle
0

Die zusätzliche VC der obersten Ebene funktioniert gut für eine einfache App, aber sie wird nicht auf modal präsentierte VCs übertragen, da sie kein parentVC haben. Sie müssen es also an verschiedenen Stellen wieder einfügen.

Ein besserer Ansatz, den ich gefunden habe, bestand darin, UINavigationController abzuleiten und dann einfach Ihre Unterklasse im Storyboard und anderswo zu verwenden, wo Sie normalerweise UINavigationController verwenden würden. Es speichert den zusätzlichen VC-Kram in Storyboards und spart außerdem mehr Unordnung im Code.

In diesem Beispiel werden alle iPhones eine normale horizontale Größenklasse für Querformat verwenden.

%Vor%     
trapper 24.11.2016 01:15
quelle