Когда появляется предупреждение, клавиатура закрывается. Я искал везде, но не нашел решений, чтобы клавиатура оставалась видимой. При представлении предупреждения текстовое поле, кажется, автоматически отказывается от первого ответчика, поскольку предупреждение представлено модально. Как можно сохранить клавиатуру за этим предупреждением, что означает, что текстовое поле все еще редактируется, даже если взаимодействие будет невозможно?
ДЕРЖАТЬ клавиатуру, когда UIAlertcontroller представлен в Swift?
Ответы (2)
Это решение работает для меня:
let rootViewController: UIViewController =
UIApplication.sharedApplication().windows.lastObject.rootViewController!!
rootViewController.presentViewController(alert, animated: true, completion: nil)
отредактировано @galambalazs: Причина, по которой это работает, заключается в том, что:
Вы можете захватить окно с текущим самым высоким уровнем окна и представить свой Контроллер представления внутри этого Окна (сделав его верхним Контроллером представления в верхней части окна). Окно).
UIApplication.sharedApplication(). windows
Окна в массиве упорядочены сзади наперед по уровню окна;
таким образом, последнее окно в массиве находится поверх всех других окон приложения.
Также вы можете установить 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;
person
Sam
schedule
24.02.2015
Похоже, что это использует окно, в котором находится строка состояния, для представления контроллера предупреждений, верно?
- person ninjudd; 03.06.2015
На самом деле, я был неправ. Второе окно в
UIAppplication.sharedApplication().windows
— это UITextEffectsWindow.
- person ninjudd; 03.06.2015
После дополнительных исследований я обнаружил, что UITextEffectsWindow — это место, где находится представление клавиатуры (или UIViewController inputAccessoryView). Таким образом, это второе окно будет существовать только в том случае, если была отображена клавиатура. fantageek.com/1317/uiwindow-in-ios
- person ninjudd; 03.06.2015
Так что это сработало для меня. Хотя фон становится черным, и это нехорошо, если вы используете эффект в качестве фона (используя представление фактического контроллера представления). Также переход не очень хорош (т.к. заменяет фактический вид черным фоном). Все еще ищу лучшее решение...
- person Tzegenos; 08.09.2015
Я думаю, вы должны использовать UIApplication.sharedApplication().windows.lastObject.rootViewController, тогда код будет работать независимо от того, отображается ли клавиатура или скрывается.
- person smoothdvd; 18.09.2015
Есть ли другой способ, кроме доступа к внутренней иерархии окон?
- person NYC Tech Engineer; 30.12.2015
Спасибо. Решение хорошо работало только в iOS 8, но не работает в iOS 9. Также обратите внимание, что в ответе есть лишний
!
в конце, который не нужен. со Свифт 2.1
- person Zhao; 09.02.2016
Решение @smoothdvd хорошо работает для iOS 9 и 8. Хотя в iOS 8 иногда случаются сбои. Изучаем проблему.
- person Zhao; 09.02.2016
следует ли
lastObject
заменить на last
?
- person He Yifei 何一非; 20.06.2016
Для Swift 3 и 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)
}
person
Hiren Panchal
schedule
02.11.2017