2014-11-20 8 views
7

Ich scheine in ein ähnliches Problem wie man in einer ungelösten Frage gepostet zu laufen: UIAlertController dismissing his presentingViewControllerUIAlertController durch einen modalen View-Controller vorgestellt entlassen

Ich bin einen modalen View-Controller auf einem normalen UIViewController präsentiert. Dann mache ich eine Warnung auf diesem Modalansicht-Controller. Wenn ich "OK" drücke, um die Warnung zu verwerfen (generiert mit dem unten stehenden Code), wird der Modal-View-Controller ebenfalls ausgeblendet.

UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK" 
              style:UIAlertActionStyleDefault 
              handler:^(UIAlertAction *action{ 
                [self dismissViewControllerAnimated: YES completion: nil];}]; 

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Sign up problem." 
                   message:@"Some fields are empty. Please check your inputs and try again." 
                 preferredStyle:UIAlertControllerStyleAlert]; 
[alert addAction:ok]; 
[self presentViewController:alert animated:YES completion:nil]; 

Wie kann ich nur die Warnung ablehnen?

Ich realisiere, dass ich dieses Problem vermeiden kann, indem ich stattdessen eine Navigationssteuerung verwende und die Navigationsleiste verberge, damit ich das gleiche Gefühl wie beim Modal View-Controller bekomme, aber das scheint albern. Vielen Dank.

Antwort

21

Rufen Sie nicht self dismissViewController in der Schaltfläche Handler. Das besagt ausdrücklich, dass Sie den View-Controller ablehnen möchten.

Sie müssen die Warnung nicht verwerfen. Es wird sich automatisch abmelden. Das einzige, was Sie im Button-Handler tun sollten, ist die Ausführung der von Ihnen benötigten Aktion. Tun Sie nichts, wenn Sie nichts tun müssen.

Wenn Ihre Warnung einfach eine Nachricht ist, und Sie brauchen keine Aktion auszuführen, tun nur dies:

UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; 
+0

Danke. Sehr geschätzt, und beide Verhaltensweisen sind nützlich. –

0

Sie müssen die UIAlertController manuell in keiner Weise in einem Button-Handler löschen oder entfernen - sie tut das selbst.

Entfernen Sie einfach den Anruf zu dismissViewControllerAnimated:completion:.

+0

Aber was, wenn Sie tatsächlich aus bestimmten Gründen wollen. Es muss einen Weg geben, sie programmatisch zu schließen. Zum Beispiel mit dem älteren '' 'UIAlertView''' könntest du das programmatisch abschalten/verstecken. – Supertecnoboff

+0

@Supertechnoboff: Ich denke du kannst einfach '[self disneyViewControllerAnimated: completion:]'. Nicht sicher, obwohl. – Linuxios

Verwandte Themen