2015-02-17 7 views
13

Po pojawieniu się alarmu klawiatura zostaje odrzucona. Rozglądałem się wszędzie, ale nie znalazłem rozwiązań, aby klawiatura była widoczna. Po wyświetleniu alertu wydaje się, że pole tekstowe automatycznie rezygnuje z pierwszej odpowiedzi, ponieważ alarm jest prezentowany modalnie. W jaki sposób można utrzymać klawiaturę za tym alarmem, co oznacza, że ​​pole tekstowe wciąż jest edytowane, nawet jeśli nie będzie możliwa interakcja?ZACHOWAĆ klawiaturę, gdy w Swift jest wyświetlany kontroler UIAlert?

Odpowiedz

21

Rozwiązanie to działa na mnie:

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

edit przez @galambalazs: Powodem jest to działa, ponieważ:

Można chwycić okno z aktualnym najwyższym poziomie i okiennej Przedstaw swój kontroler View wewnątrz tego Okno (co czyni go najlepszym kontrolerem View w górnej części Okno).

UIApplication.sharedApplication().windows
okien w tablicy są uporządkowane od tyłu do przodu przez poziom okiennej;
tym samym ostatnie okno w tablicy znajduje się na górze wszystkich innych okien aplikacji.

Również może chcesz ustawić tintColor tego okna tak, że pasuje aplikacje globalne tintColor.

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

Wygląda na to jest za pomocą okna pasek stanu jest, by przedstawić powiadomienie kontroler, prawda? – ninjudd

+1

Właściwie to się myliłem. Drugie okno w 'UIAppplication.sharedApplication(). Windows' jest UITextEffectsWindow. – ninjudd

+1

Po dalszych badaniach odkryłem, że UITextEffectsWindow jest tam, gdzie znajduje się widok klawiatury (lub UIViewController inputAccessoryView). To drugie okno będzie istniało tylko wtedy, gdy wyświetlona jest klawiatura. http://www.fantageek.com/1317/uiwindow-in-ios/ – ninjudd

0

Dla Swift 3 i 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) 
    } 
Powiązane problemy