2015-02-17 6 views
13

Wenn die Warnung erscheint, wird die Tastatur geschlossen. Ich habe überall gesucht, aber keine Lösungen gefunden, um die Tastatur sichtbar zu halten. Wenn eine Warnung angezeigt wird, scheint das Textfeld den Ersthelfer automatisch zurückzuweisen, da die Warnung modal präsentiert wird. Wie ist es möglich, die Tastatur hinter dieser Warnung zu halten, was bedeutet, dass das Textfeld noch bearbeitet wird, auch wenn keine Interaktion möglich ist?Keep Tastatur eingeschaltet, wenn UIAlertcontroller in Swift dargestellt wird?

Antwort

21

Diese Lösung funktioniert für mich:

let rootViewController: UIViewController = 
    UIApplication.sharedApplication().windows.lastObject.rootViewController!! 
rootViewController.presentViewController(alert, animated: true, completion: nil) 

bearbeitet von @galambalazs: Der Grund, es funktioniert, weil:

Sie das Fenster mit dem aktuellen höchsten Fenster Ebene greifen und Präsentieren Sie Ihre View Controller in diesem Fenster (so dass es die Top View Controller in den oberen Fenster).

UIApplication.sharedApplication().windows
Die Fenster in der Anordnung werden von hinten nach vorne durch Fensterebene angeordnet;
Das letzte Fenster im Array befindet sich also über allen anderen App-Fenstern.

Vielleicht möchten Sie auch die TintColor dieses Fensters so einstellen, dass sie mit Ihrer globalen TintColor-App übereinstimmt.

UIWindow *topWindow = [UIApplication sharedApplication].windows.lastObject; 
// we inherit the main window's tintColor because topWindow may not have the same 
topWindow.tintColor = [UIApplication sharedApplication].delegate.window.tintColor; 
+1

Es sieht aus wie dies in der Statusleiste ist mit dem Fenster ist der Alarm-Controller zu präsentieren, nicht wahr? – ninjudd

+1

Eigentlich habe ich mich geirrt. Das zweite Fenster in 'UIAppplication.sharedApplication(). Windows' ist ein UITextEffectsWindow. – ninjudd

+1

Nach mehr Forschung entdeckte ich, dass UITextEffectsWindow ist wo die Tastaturansicht (oder UIViewController inputAccessoryView) befindet. Dieses zweite Fenster wird nur existieren, wenn die Tastatur angezeigt wurde. http://www.fantageek.com/1317/uiwindow-in-ios/ – ninjudd

0

Für Swift 3 und iOS11

if let alertWindow = UIApplication.shared.windows.last, alertWindow.windowLevel == 10000001.0 // If keyboard is open 
    { // Make sure keyboard is open 
    alertWindow.rootViewController?.present(alertController, animated: true, completion: nil) 
    } 
    else 
    { 
    viewController?.present(alertController, animated: true, completion: nil) 
    }