Ich habe Probleme mit der dismissViewControllerAnimated
-Methode, die die Ansicht nicht schließt.
Was in der App hier passiert, ist:
ItemViewController
ist ausgewählt.ItemDetailViewController
und Details werden über einen Delegierten gesendetItemViewController
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];
}
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?
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
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
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];
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.