wake-up-neo.com

dismissViewControllerAnimated wird aufgerufen, ViewController wird jedoch nicht abgelehnt

Ich habe Probleme mit der dismissViewControllerAnimated-Methode, die die Ansicht nicht schließt.

Was in der App hier passiert, ist:

  • Zelle in ItemViewController ist ausgewählt.
  • Ansicht ist Push ed auf ItemDetailViewControllerund Details werden über einen Delegierten gesendet
  • Der Benutzer wählt 'erledigt' aus und das Ereignis wird über einen Delegierten gesendet, der in ItemViewController geschlossen wird.

All dies funktioniert, außer der View wird nicht verworfen, es gibt keine Fehler. Kann jemand sehen was falsch ist?

- (void)itemDetailViewControllerDidFinish:(ItemDetailViewController *)controller
{
    NSLog(@"Controller: %@", controller);
    // Returns - Controller: <ItemDetailViewController: 0x6b68b60>

    [self dismissViewControllerAnimated:YES completion:nil];
}
43
Ad Taylor

Was ist, wenn Sie stattdessen [controller.navigationController popViewControllerAnimated:YES] aufrufen?

Was ist, wenn Sie [controller dismissViewControllerAnimated:YES completion:nil] aufrufen, anstatt ihn selbst zu nennen?

66
Nick Lockwood

Die Antwort ist auf dieser Seite: dismissviewcontrolleranimated-vs-popviewcontrolleranimated

dismissViewController wird verwendet, wenn Sie keinen Navigationscontroller haben . Wahrscheinlich verwenden Sie einen Navigationscontroller. Verwenden Sie dann Stattdessen self.navigationController popViewController.

Beachten Sie auch Lemax seine Bemerkung: Verwenden Sie NULL, nicht Nill für den Completionhandler

10
Leander

Hatte ein Problem, bei dem der Aufruf von dismissViewControllerAnimated die Tastatur in einem UIViewController abtat, nicht aber die Ansicht selbst.

Es wurde mit zwei Aufrufen gelöst:

[self dismissViewControllerAnimated:NO completion:nil];
[self dismissViewControllerAnimated:YES completion:nil];

eine für die Tastatur, dann eine animierte für den Controller

4
Cbas

Ich hatte in iOS5 ein Problem, bei dem der standardmäßige Beendigungsrückruf die Ansicht nicht vollständig verwies.

[controller dismissViewControllerAnimated:YES completion:^ {
     //
 }];

Lösung für iOS5 soll keinen Rückruf haben:

[controller dismissViewControllerAnimated:YES completion:nil];
4
Danoli3

Ihre Situation ist - ItemViewController -> ItemDetailViewController (gedrückt auf dem navigationController) Self.dismissViewController (..) verwirft einen View-Controller, der über self dargestellt wird (in diesem Fall ist es der ItemViewController). Hier haben Sie kein VC über self präsentiert, sondern Sie haben ein neues VC über den Navigationsstapel geschoben. Der richtige Weg, ItemDetailViewController zu verwerfen, wäre also

self.navigationController.popViewController (true). Bitte lesen Sie die Beschreibung von dismissViewController (....), um mehr Klarheit zu erhalten.

0
Arya