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
istIch 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
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.
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%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%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.
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 -
und rufen Sie in demselben View Controller, dem ViewController, den Sie aufrufen, die Delegate-Methode in der viewDidDisappear
-Methode auf -
Dann kann der Controller, der gedrückt wird, die Delegate-Methode implementieren und innerhalb dieser Delegate-Methode können Sie tun, was Sie wollen.
Tags und Links objective-c iphone ios