Wie man einen viewController aufruft und dann einen viewController durch Delegation drückt

8

Ich habe einen UITableViewController, der, wenn eine Zelle gedrückt wird, möchte, dass der Controller sich selbst aufpoppt, und dann den Controller, den er hat, einen anderen View-Controller auf den Stack schieben.

Ich rufe diese Methode auf, weil popping-to viewController der Delegate von tableViewController

ist

Ich rufe diese Methode gerade mit einer Verzögerung auf, weil sonst alles kaputt geht und auf das Ende der Animation wartet. Es scheint ein bisschen hacky zu sein und es scheint mir, als ob es scheitern würde, wenn jemandes Gerät die Ansicht in der zugewiesenen Wartezeit, die ich ihm gegeben habe, nicht veröffentlicht hat.

Hier ist ein Teil des Codes:

%Vor%

Es scheint so, als sollte es eine bessere Möglichkeit geben, die Delegierung durchzuspeichern, die nach Beendigung der Animation ausgeführt wird. Die Wartezeit scheint mir wie unerwartete Probleme zu verursachen.

Ich habe auch versucht mit:

%Vor%

Aber der Code wird einfach sofort ausgeführt und die View-Hierarchie wird vermasselt.

Ich habe mir auch diese Frage angeschaut: Delegationsfrage und es hat mich so weit gebracht, aber ich bin gespannt, ob es einen besseren Weg gibt, eine solche Aufgabe zu erfüllen, Vielen Dank.

edit: Ich habe auch versucht, die Methode in einer Instanz von NSInvocation zu umbrechen, und ich konnte es nicht erreichen, den Methodenaufruf zu koordinieren, bis die Animation beendet ist, ohne die Verzögerung willkürlich einzustellen

    
SaamJB 22.08.2011, 03:01
quelle

5 Antworten

4

Sie sollten eine Flagge verwenden, um diese Situation zu überwinden. Sie setzen dieses Flag in der ViewWillDisappear-Methode des View-Controllers, der geöffnet wird. Wenn dieses Flag gesetzt ist, können Sie einen anderen View-Controller auf den Stack schieben. Hoffe es ist klar.

    
Darshan Prajapati 22.08.2011, 03:11
quelle
37

Der sauberste Weg, um mehr als nur einen einzelnen Push oder Pop eines View-Controllers zu machen, ist das Festlegen des UINavigationController s-View-Controller-Arrays.

Um beispielsweise einen View-Controller zu öffnen und dann zu drücken:

%Vor%     
Jason Moore 17.12.2012 12:33
quelle
3

Wie wäre es, wenn Sie Ihren UIViewController mit der Tabelle, an die Sie eine NSNotifcation senden, in Ihrer viewDidDisappear-Methode wie folgt ablehnen:

%Vor%

Und in Ihrem übergeordneten View-Controller, der einen neuen View-Controller verschiebt, fügen Sie einen Beobachter für diese Benachrichtigung hinzu:

%Vor%

Sie sollten eine Methode haben, die mit der Auswahl übereinstimmt.

%Vor%     
Zhang 22.08.2011 03:34
quelle
0

Stellen Sie es nicht vom obersten Controller her. Rufen Sie die Delegate-Methode auf, die die Ansicht vom Navigationscontroller löscht und dann eine neue anlegt.

    
Nathanial Woolls 22.08.2011 03:07
quelle
0

Ich mochte Alexandres Lösung, aber wenn ich eine Delegierte Person wäre, würde ich keine Benachrichtigung verwenden wollen. In diesem Fall können wir einfach den Delegaten in der Methode viewDidDisappear verwenden.

Also, in der Methode didSelectRowAtIndexPath können Sie den Controller -

öffnen %Vor%

und rufen Sie in demselben View Controller, dem ViewController, den Sie aufrufen, die Delegate-Methode in der viewDidDisappear -Methode auf -

%Vor%

Dann kann der Controller, der gedrückt wird, die Delegate-Methode implementieren und innerhalb dieser Delegate-Methode können Sie tun, was Sie wollen.

    
Natasha 26.06.2016 09:06
quelle

Tags und Links