Как показать keyWindow перед клавиатурой, когда приложение в фоновом режиме? - PullRequest
0 голосов
/ 05 ноября 2019
UIApplication.shared.keyWindow?.addSubview(self.backgroundImage)

Я попробую это:

let windowCount = UIApplication.shared.windows.count

UIApplication.shared.windows[windowCount-1].addSubview(self.backgroundImage)

Нет

Я что-то набираю с клавиатуры и нажимаю кнопку возврата домой. Мне нужно показать только фоновое изображение при возврате приложения, но приложение показывает клавиатуру перед backgroundImage

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Окно, содержащее клавиатуру, является единичным, и его уровень выше, чем у keyWindow. Таким образом, ваше self.backgroundImage, которое в keyWindow не может закрывать клавиатуру.

Предлагать:

вызывать window.resignFirstResponder(), когда приложение войдет в фон.

Лучший способ:

Добавить фоновое изображение в окно клавиатуры, если оно показывает

if let keyboardWindow = applicationKeyboardWindow {
    keyboardWindow.addSubview(self.backgroundImage)
}

var applicationKeyboardWindow: UIWindow? {
   var windows = UIApplication.shared.windows.filter { win -> Bool in
        let descri = String(describing: type(of: win))
        return descri == "UITextEffectsWindow" || descri == "UIRemoteKeyboardWindow"
    }
    windows.sort(by: { $0.windowLevel > $1.windowLevel } )
    return windows.first
}
0 голосов
/ 05 ноября 2019

Вы можете просто вызвать resignFirstResponder() на компоненте (пример: UITextField/UITextView), для которого вы показываете клавиатуру, в viewWillDisappear(_:), т.е.

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.textField.endEditing(true)
}

. В приведенном выше коде замените self.textField с определенным элементом ввода.

...